1. 程式人生 > >面向對象知識點總結

面向對象知識點總結

() 繼承 變量 解決 通過 {} 私有方法 java 傳遞

python是一門動態強類型語言:
弱類型體現在傳參的時候不用指定數據類型,
強類型體現在比如 2+"str"會報數據類型錯誤

python不崇尚根據繼承所得來的相似,比如tuple和list的方法已經非常相似了,卻還是各自獨立的方法
這就是python崇尚的鴨子類型,優點是松耦合。


三種編程模式:面向過程編程、面向函數編程、面向對象編程
面向對象設計模式:優點是解決了程序的可擴展性,缺點是可控性差
面向對象的三大特性:繼承、多態、封裝

類中的靜態變量可以被類和對象調用
類變量中對於不可變數據類型最好用類名操作,而不用對象操作
如果用對象操作:
類變量中如果是不可變數據類型,重新賦值是獨立的,

類變量中如果是可變數據類型,修改值是共享的

當對象去調用方法的時候,就是把這個對象的值傳遞給這個方法了
導入一個模塊的時候就像是實例化了一個對象,會調用這個模塊的__init__方法

組合:一個對象的屬性值是另外一個類的對象

繼承:
子類.__bases__可以查看父類名字
父類中沒有,在子類中出現的屬性叫做派生屬性
父類中沒有,在子類中出現的方法叫做派生方法
子類的對象調用:
只要是子類中有的名字一定先用子類的,子類中沒有才用父類的,父類中也沒有就報錯
如果子類父類都有,優先使用子類的,如果還想用父類的,就得再單獨調用父類的

super()方法的使用:

不是單獨的找父類,而是根據繼承順序以廣度優先來找的
class Base(object):
def __init__(self, name, age):
self.name = name
self.age = age
class temp(Base):
def __init__(self, name, age, sex):
super().__init__(name, age)
self.sex = sex

新式類的繼承順序都是廣度優先
經典類的繼承順序都是深度優先
mro():
查看一個類的父類繼承順序


多態:
python天生支持多態

class Alipay:
def pay(self, money):
print("用支付寶支付了{}元".format(money))


class Wepay:
def pay(self, money):
print("用微信支付了{}元".format(money))


a = Alipay()
w = Wepay()


def pay(pay_obj, money):
pay_obj.pay(money)


pay(a, 200)
pay(w, 30)

上面的例子可以看出,調用pay方法的時候
如果是java強類型語言,
必須再創造一個類,讓Alipay和Wepay都繼承,
而在python中就不用,而是可以直接傳Alipay類或者Wepay類

封裝:
在類內部可以創造私有靜態屬性、私有屬性、私有方法、
私有靜態屬性、私有屬性、私有方法 只能在類內部使用
如果在類外部調用私有,通過 _類名__私有屬性 調用

面向對象知識點總結