主動調用其他類的成員, 特殊成員
阿新 • • 發佈:2018-09-02
war value ase other item pass self. 對象 pytho
一. 主動調用其他類的成員
class Base(object): def f1(self): print(‘5個功能‘) obj = Base() Base.f1(obj) obj.f1()
方式一
class Base(object): def f1(self): print(‘5個功能‘) class Foo(object): def f1(self): print(‘3個功能‘) Base.f1(self) obj = Foo() obj.f1()
方式二:按照類的繼承順序,找下一個.
class Base(object): def f1(self): print(‘5個功能‘) class Foo(Base): def f1(self): super().f1() print(‘3個功能‘) obj = Foo() obj.f1()
方式二:按照類的繼承順序,找下一個.
class Foo(object): def f1(self): super().f1() print(‘3個功能‘) class Bar(object): def f1(self): print(‘6個功能‘) class Info(Foo,Bar): pass # obj = Foo() # obj.f1() # Foo中沒有繼承Bar, super()會報錯 obj = Info() obj.f1()
二. 特殊成員
class Foo(object): def __init__(self,a1,a2): self.a1 = a1 self.a2 = a2 def __call__(self, *args, **kwargs): print(11111,args,kwargs) return 123 def __getitem__(self, item): print(item) return 8 def __setitem__(self, key, value): print(key,value,111111111) def __delitem__(self, key): print(key) def __add__(self, other): return self.a1 + other.a2 def __enter__(self): print(‘1111‘) return 999 def __exit__(self, exc_type, exc_val, exc_tb): print(‘22222‘) 1. 類名() 自動執行 __init__ obj = Foo(1,2) 2. 對象() 自動執行 __call__ ret = obj(6,4,2,k1=456) 3. 對象[‘xx‘] 自動執行 __getitem__ ret = obj[‘yu‘] print(ret) 4. 對象[‘xx‘] = 11 自動執行 __setitem__ obj[‘k1‘] = 123 5. del 對象[xx] 自動執行 __delitem__ del obj[‘uuu‘] 6. 對象+對象 自動執行 __add__ obj1 = Foo(1,2) obj2 = Foo(88,99) ret = obj2 + obj1 print(ret) 7. with 對象 自動執行 __enter__ / __exit__ obj = Foo(1,2) with obj as f: print(f) print(‘內部代碼‘) 8. 真正的構造方法 class Foo(object): def __init__(self, a1, a2): # 初始化方法 """ 為空對象進行數據初始化 :param a1: :param a2: """ self.a1 = a1 self.a2 = a2 def __new__(cls, *args, **kwargs): # 構造方法 """ 創建一個空對象 :param args: :param kwargs: :return: """ return object.__new__(cls) # Python內部創建一個當前類的對象(初創時內部是空的.). obj1 = Foo(1,2) print(obj1) obj2 = Foo(11,12) print(obj2)
主動調用其他類的成員, 特殊成員