在Python中,類通過 class 關鍵字定義,類名通用習慣為首字母大寫,Python3中類基本都會繼承於object類,語法格式如下,我們創建一個Circle圓類:
注意:我們定義的類都會默認繼承object類,當然也可以不繼承object類;兩者區別不大,但沒有繼承於object類使用多繼承時可能會出現問題。
有了Circle類的定義,就可以創建出具體的circle1、circle2等實例,circle1和circle2是個實際的圓。創建實例使用 類名+(),類似函數調用的形式創建。
如下我們創建兩個Circle類的實例:
circle1= Circle()circle2= Circle()創建好實例對象後,我們就可以使用類中定義的所有方法。
2.self變量哪個對象調用方法或者屬性,self就是那個值
class Human(): def eat(self): print('人吃飯', id(self))
def sleep(self): print('人要睡覺', id(self))
zs = Human()zs.eat()zs.sleep()print(id(zs))
ls = Human()ls.eat()ls.sleep()print(id(ls))3.__init__()方法此方法是個內置方法,在創建對象的時候自動執行,同樣我們可以對此方法進行一些初始化操作
class Student: def __init__(self, name, age, sex='男'): self.name = name self.age = age self.sex = sex
def show(self): print('姓名:', self.name, '年齡:', self.age, '性別:', self.sex)
zs = Student('張三', 12, '男')ls = Student('李四', 43)zs.show()ls.show()__init__()雖然可以初始化屬性,但是別的地方也可以更改屬性
class Person(): def __init__(self, name): self.name = name
def haha(self, age): self.age = age
def xixi(self): print(self.name, self.age)
zs = Person('張三')zs.haha(15) zs.xixi()
ls=Person('李四')ls.age=45ls.xixi()二、面向對象的三大特徵:封裝,繼承,多態1.封裝舉例:
class Girl: def __init__(self,name,age): self.name=name self.__age=age def show(self): print(self.name,self.__age)g=Girl('張三',10)g.show()print(g.age) g.__age=15print(g.__age)我們可以使用dict方法查看所有a屬性的元素
print(g.__dict__)# {'name': '張三', '_Girl__age': 10, '__age': 15}但是如果非想改,可以使用_類名__屬性名修改,但是不建議使用
2.繼承2.1 單繼承class Animal: def __init__(self, name, age): self.name = name self.age = age
def eat(self): print('吃')
def sleep(self): print('睡')
class Cat(Animal): def jiao(self): print('喵')
class Dog(Animal): def jiao(self): print('汪')
c = Cat('貓', 10)d = Dog('狗', 12)c.eat()d.eat()2.2 多繼承多繼承如果父類們擁有共同的方法則按照第一個順序進行繼承
class A: def shuchu(self): print('A')
class B(): def shuchu(self): print('B')
class C(A,B): def shuchu3(self): print('C')
c = C()c.shuchu()子類繼承父類,如果子類不重寫父類的某個方法,那么子類執行父類的方法
子類繼承父類,如果子類複寫了某個方法,那么子類只使用自己的方法
父類的私有屬性不能被繼承
3.多態python是弱類型語言,python中處處是多態;python中沒有多態,但是有鴨子類型 ()一些類含有相同的方法,則這些類就互稱為鴨子
class Alipay(): def pay(self): print('支付寶支付')class Wechatpay(): def pay(self): print('微信支付')class Person(): def xiaofei(self,a): a.pay()ali=Alipay()wx=Wechatpay()p=Person()p.xiaofei(wx)p.xiaofei(ali)