1. 程式人生 > >python全棧開發 * 23 面向對象 知識點匯總 * 180704

python全棧開發 * 23 面向對象 知識點匯總 * 180704

時間 style 面向 比較運算 垃圾回收機制 開發 ash alex key

23 面向對象
      -----特殊方法



1. isinstance(obj,類名)     判斷對象是否是此類實例化或者此類的子類實例化出來的
class A:pass
class B(A):pass
b1=B()
print(isinstance(b1,B)) # True
print(isinstance(b1,A)) # True
2.issubclass(類名,類名1) 判斷類名是否是類名1的子類
class A:pass
class B(A):pass
print(issubclass(B,A)) #True
print(issubclass(A,B)) #False

3.__len__用法
class C:
def __init__(self):
self.a=1
self.b=2
def __len__(self):
return len(self.__dict__)
c1=C()
print(len(c1))
4.__hash__用法
class C:
def __init__(self):
self.a=1
self.b=2
def __hash__(self):
return hash(str(self.a)+str(self.b))
c1=C()
print(hash(c1)
)

5.__str__用法 如果一個類中定義了__str__方法,那麽在打印 對象 時,默認輸出該方法的返回值
class B:
def __init__(self,name,age):
self.name=name
self.age=age
def __repr__(self):
return "太白"
b2=B("alex1",1000)
print(b2)
print("%s"% b2)

6.__repr__用法 如果一個類中定義了__repr__方法,那麽在repr(對象) 時,默認輸出該方法的返回值
class B:
def __init__(self,name,age):

self.name=name
self.age=age
def __repr__(self):
print("666")
return "太白"
b1=B("alex",1000)
print(repr(b1)) # 方法一
print("%r"% b1) # 方法二
#補充知識:格式化輸出
# %s 數字和字符串 %r +"" repr 原形畢露 %d 數字 %f 小數
7.__call__用法 構造方法的執行是由創建對象觸發的,即:對象 = 類名() ;而對於 __call__ 方法的執行是由對象後加括號觸發的,
即:對象() 或者 類()()
class Foo:
def __init__(self):
pass
def __call__(self,*args,**kwargs):
print(args,kwargs)
a1=Foo()
a1("alex",a=666) #(‘alex‘,) {‘a‘: 666}

8.__eq__用法 對一個類實例化的兩個對象進行比較運算的時候自動觸發.
class A:
def __init__(self,):
self.a=1
self.b=2
def __eq__(self,obj): # 需要手動傳一個參數
if self.a==obj.a and self.b==obj.b:
return True
a1=A()
b1=A()
print(a1==b1)
9.__del__用法 析構方法
#python垃圾回收機制:
#文件中你創建的所有的變量,類等等,執行過程中將所有變量,類做個標記,執行完之後,在一段時間之內,沒有被調用,則會自動回收.
class A:
def __del__(self):
print("666")
a1=A()
a1.__del__

10.__new__用法
class A:
def __init__(self):
self.x=1
print("in init function") # 第五步
def __new__(cls,*args,**kwargs): # 第二步 自動執行__new__方法
print(cls) # 第三步<class ‘__main__.A‘>
print("in new function") # 第四步

return super().__new__(cls) # 返回一個對象空間
return object.__new__(cls) 第二種方法
a1=A() # 第一步 類名加括號
11.設計模式:
單例模式: 對一個類只能實例化一個對象.最簡單的設計模式, (面試必考)
class A:
__instance=None
def __new__(cls, *argsm, **kwargs):
if A.__instance is None:
obj=object.__new__(cls)
A.__instance=obj
return A.__instance
a1=A()
b1=A()
c1=A()
print(a1,b1,c1)
12.item 用法
class Foo:
def __init__(self,name):
self.name=name
def __getitem__(self,item):
if hasattr(self,item):
return getattr(self,item)
else:
print("沒有此變量")
def __setitem__(self,key,value):
print(key,value)
def __delitem__(self,key):
print(key)

f1=Foo("alex")
print(f1["name"])
f1["name"]="mary"
del f1["name"]

python全棧開發 * 23 面向對象 知識點匯總 * 180704