1. 程式人生 > >python基礎——面向物件程式設計

python基礎——面向物件程式設計

python是面向物件的高階語言,面向物件程式設計的三個特點:1封裝2繼承3多型,

且與面相過程的C相比注重於 誰來執行的方法,而面向過程的語言注重方法的實現過程。

類與物件的的關係就好比與磨具與磨具製作出來的東西:

class People(object):
    # 類屬性
    name = '道德經'
    age = ''
    def __init__(self,fond):
        # 物件屬性
        self.fond = fond
    # 物件方法 self 指的是呼叫方法本身
    def say(self):
        print('Hello')
print(People.name)
p1 = People()
p1.fond = '學習'
p1.say()
People.say(p1)
結果為
D:\pyhon\python.exe D:/課程/第九天/2.物件總結.py
道德經
道德經
學習
Hello
Hello

python的語法比較特殊,類可以呼叫物件的屬性,物件也一樣既能呼叫自己的屬性,也能呼叫類的屬性如上面People.say(p1)

就是類呼叫物件的屬性

私有屬性

在python的物件屬性中,凡是帶下劃線的,都是不希望外部使用,但並不是說我們不能夠使用,如果 _屬性名 這種形式,我們可以通過 物件名._屬性名 這種形式呼叫訪問,如果 __屬性名 我們可以通過 物件名._類名__屬性名 這種形式訪問:

class People(object):
    def __init__(self,name='',sex='',age='16',fond='學習'):
        self.name =name
        # 防止在類外使用屬性使用_呼叫
        self._sex = sex
        self.__age = age
        self.__fond = fond
p = People()
p.name = '張三'
print(p.name)
p._sex = '男'
print(p._sex)
# 如果有這個屬性 則修改屬性值為等號後面的值
# 如果沒有屬性 則新增
p.girlFriend = '小妹'
print(p._People__age)

繼承

子繼父類,會擁有父類的屬性和方法,子類也可以重寫父類的屬性和方法,也可以自己獨有屬性和方法。

當子繼父類時,想要繼承父類的方法或者屬性時候我們可以使用super函式來繼承:

先定義一個父類:

class People(object):
    def __init__(self,age='77',sex=''):
        self.age = age
        self.sex = sex

    def eat(self):
        print('人類為吃而活')

    def breath(self):
        print('海賊王歐力瓦朗')

然後定義一個子類繼承People:

class Man(People):
    def __init__(self,age='',sex='',huZi=''):
        # 繼承父類已有的屬性
        super(Man,self).__init__(age,sex)
        # self.huZi = huZi

    def smoke(self):
        print('吸菸有害健康')

    def eat(self):
        # 繼承父類的eat方法
        super(Man,self).eat()
        print('上面這句話是繼承自People的,正在說的這句話才是我自己的')

若父類eat()方法還有其他引數時候我們,繼承時也應該傳遞其他引數例如:

父類為eat(self,other)子類繼承則應該寫為super(Man,self).eat(other)

若繼承多個父類,且父類有同名的方法,會繼承第一個父類的方法:

class A(object):
    def say(self):
        print('my name is A')
class B(A):
    def say(self):
        print('my name is B')
class C(A):
    def say(self):
        print('my name is C')
class D(B,C):#B在前面
    pass