python面向对象编程138讲_Python面向对象编程简单讲解
學(xué)習(xí)目標(biāo):
1-面向?qū)ο缶幊?/p>
2-類和對(duì)象
3-對(duì)象的屬性和方法
4-類的特性
Python面向?qū)ο缶幊?/p>
一種編程程序的設(shè)計(jì)思想,把對(duì)象作為程序的基本單元,一個(gè)對(duì)象包含了數(shù)據(jù)和操作數(shù)據(jù)的函數(shù)。把計(jì)算機(jī)程序視為一組對(duì)象的集合,而每個(gè)對(duì)象都可以接收其他對(duì)象發(fā)過來的消息,并處理這些消息,計(jì)算機(jī)程序的執(zhí)行就是一系列消息在各個(gè)對(duì)象之間傳遞。
在Python中,所有數(shù)據(jù)類型都可以視為對(duì)象,也可以自定義對(duì)象。自定義的對(duì)象數(shù)據(jù)類型就是面向?qū)ο笾械念?class)概念。
面向?qū)ο蟮脑O(shè)計(jì)思想是抽象出Class(類)和instance(實(shí)例),面向?qū)ο蟮某橄蟪潭缺群瘮?shù)高,一個(gè)類即包含數(shù)據(jù)又包含操作數(shù)據(jù)的方法。
類和對(duì)象
面向?qū)ο缶幊痰膬蓚€(gè)非常重要的概念:類和對(duì)象
對(duì)象是面向?qū)ο缶幊痰暮诵?#xff0c;在使用對(duì)象的過程中,為了將具有共同特征和行為的一組的景象定義,提出了另外一個(gè)新的概念——類
類
具有相似內(nèi)部狀態(tài)和運(yùn)動(dòng)規(guī)律的實(shí)體的集合。具有相同發(fā)生和行為事物的統(tǒng)稱,類是抽象的,在使用的時(shí)候通常會(huì)找到這個(gè)類的一個(gè)具體的存在,使用這個(gè)具體的存在。一個(gè)類可以找到多個(gè)對(duì)象。
對(duì)象
某一個(gè)具體事物的存在,在現(xiàn)實(shí)世界中可以是看得風(fēng)措得著的,可以是直接使用的。
類與對(duì)象之間的關(guān)系:類就是創(chuàng)建對(duì)象的模板
定義類和創(chuàng)建對(duì)象
定義一個(gè)類和創(chuàng)建對(duì)象,格式如下:
#創(chuàng)建類——經(jīng)典方法
class 類名: #class-關(guān)鍵字,類名的命名使用大駝峰命名法,即首字母大寫
#如下:
class Hero:
#創(chuàng)建類——新方法
class Hero(object):#object是python里所有類的最頂級(jí)父類
#函數(shù),在類中叫做方法
#創(chuàng)建方法
def info(self):#info是一個(gè)實(shí)例方法,第一個(gè)參數(shù)一般是self:表示實(shí)例對(duì)象本身。
print("這是面向?qū)ο骽ero")
#創(chuàng)建對(duì)象
對(duì)象名1 = 類名()
對(duì)象名2 = 類名()
對(duì)象名3 = 類名()
對(duì)象名(不必遵循大駝峰命名法) = 類名()
my_hero = Hero()
#對(duì)象的使用方法,對(duì)象名.(點(diǎn)語法)方法名
my_hero.info()
#輸出結(jié)果:
這是面向?qū)ο骽ero
#再創(chuàng)建一個(gè)對(duì)象
my_hero2 = Hero()
print(my_hero)
print(my_hero2)
#輸出結(jié)果:
<__main__.hero object at>#地址:在存儲(chǔ)機(jī)制中
<__main__.hero object at>#地址
對(duì)象的屬性和方法
獲取和添加對(duì)象的屬性
class teacher(object):
def show(self):
print("今天北京下雪了")
#創(chuàng)建對(duì)象
teacher_zhang = teacher()
#添加屬性、特點(diǎn)、特征
teacher_zhang.name = "張三"
teacher_zhang.age = 20
teacher_zhang.sex = "男"
#獲取屬性,通過點(diǎn)語法
print(teacher_zhang.name)
輸出結(jié)果:張三
#修改屬性
teacher_zhang.age = 30
print(teacher_zhang.age)
輸出結(jié)果:30
init 魔法函數(shù):用來做屬性的初始化
class teacher(object):
def __init__(self):
print("這是init方法")
def showName(self):
print("我的名字")
zhangsan = teacher()
zhangsan.showName()
#輸出結(jié)果
這是init方法
我的名字
#__init__()方法,在創(chuàng)建一個(gè)對(duì)象時(shí)自動(dòng)被調(diào)用,不需要手動(dòng)調(diào)用
即:
class teacher(object):
def __init__(self):
print("這是init方法")
def showName(self):
print("我的名字")
zhangsan = teacher()
#輸出結(jié)果:
這是init方法
#有參數(shù)的init方法
class teacher(object):
def __init__(self,name,age):
print("這是init方法")
self.name = name
self.age = age
print(name,age)
def showName(self):
print("我的名字")
zhangsan = teacher("張三",20)
#輸出結(jié)果
張三 20
類的特性:封裝、繼承、多態(tài)
繼承:多個(gè)類之間的所屬關(guān)系
class Father(object):
def __init__(self,name):
self.name = name
print("我叫%s"%self.name)
def info(self):
print("我來自")
class Son(object):
def show(self):
print("展現(xiàn)我自己")
guoQilin = Son()
guoQilin.show()
#輸出結(jié)果:展示我自己
單繼承:Son類繼承于Father
class Father(object):#父類:基類
def __init__(self,name):
self.name = name
self.family = "郭氏"
print("我叫%s"%self.name)
def info(self):
print("我來自%s家族"%self.family)
class Son(Father):#子類,通過繼承,可以使用父類中的方法
def show(self):
print("展現(xiàn)我自己")
def info(self):
print("我是德云社新一代,個(gè)性就是要與眾不同")
guoQilin = Son("郭麒麟") #”郭麒麟“是屬性,guoQilin是一個(gè)對(duì)象
guoQilin.show()
guoQilin.info()
#輸出結(jié)果
我叫郭麒麟
展現(xiàn)我自己
我是德云社新一代,個(gè)性就是要與眾不同
子類在繼承的時(shí)候,子類定義小括號(hào)中父類的名字;父類中的屬性與方法都會(huì)傳給子類;雖然子類沒有定義init方法,但是父類有,子類應(yīng)付使用父類的方法。
多繼承:
#多繼承
class Father(object):
def __init__(self,name):
self.name = name
self.family = "郭氏"
print("我叫%s"%self.name)
def info(self):
print("我來自%s家族"%self.family)
class ShiFu(object):
def __init__(self):
self.teacher = "于氏門生"
def speak(self):
print("我要說相聲")
class Son(Father,ShiFu):
def show(self):
print("展現(xiàn)我自己")
def info(self):
print("我是德云社新一代,個(gè)性就是要與眾不同")
guoQilin = Son("郭麒麟") #”郭麒麟“是屬性,guoQilin是一個(gè)對(duì)象
guoQilin.show()
guoQilin.info()
guoQilin.speak()
#輸出結(jié)果
我叫郭麒麟
展現(xiàn)我自己
我是德云社新一代,個(gè)性就是要與眾不同
我要說相聲
#魔法屬性,可以查看繼承順序,子類,父類,師父類
print(Son.__mro__)
#輸出結(jié)果
(, , , )
重寫父類方法
子類繼承父類,父類的方法滿足不了子類的需要可以對(duì)父類的方法進(jìn)行重寫;重寫的特點(diǎn):繼承關(guān)系,方法名相同
屬性方法
類屬性與實(shí)例屬性
類屬性就是類對(duì)象所擁有的屬性,這被所有類對(duì)象的實(shí)例對(duì)象所共有,在內(nèi)存中只存在一個(gè)副本。
#類屬性
class People(object): #創(chuàng)建一個(gè)類
ame = "tom" #公有的類屬性
__age = 12 #私有的類屬性
p = People() #創(chuàng)建一個(gè)對(duì)象
#類的共有屬性,實(shí)例(對(duì)象)與類都可以調(diào)用
print(p.name)
print(People.name)
#輸出結(jié)果:
tom
tom
#私有的類屬性,只能在類里面調(diào)用
print(p._age)
print(People._age)
#實(shí)例屬性
class People(object):
ame = "tom"
#類屬性,直接在類里面寫的
def __init__(self):#self會(huì)將其下的屬性指給對(duì)象
self.name = "xiaowang" #實(shí)例屬性
self.age = 20
p = People()
p.age = 12
print(p.name)
print(p.age)
#輸出結(jié)果
xiaowang
12
可以用實(shí)例屬性改掉類屬性
靜態(tài)方法和類方法
類方法是類對(duì)象所擁有的方法,第一個(gè)參數(shù)必須是類對(duì)象,一般以cls作為第一個(gè)參數(shù),能夠通過實(shí)例對(duì)象和類對(duì)象去訪問。類方法用@classmethod修飾。
靜態(tài)方法用@staticmethod修飾,不能傳入self,是獨(dú)立的單純的函數(shù) 。
#魔法屬性,可以查看繼承順序,子類,父類,師父類
print(Son.__mro__)
#輸出結(jié)果
(, , , )
總結(jié)
以上是生活随笔為你收集整理的python面向对象编程138讲_Python面向对象编程简单讲解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hadoop源码分析_Spark2.x精
- 下一篇: 咪咕音乐怎么取消自动续费