講解見代碼:python
一、__call__()方法、__repr__()方法、靜態方法、類方法、屬性方法。ui
#!/usr/bin/env python2 # -*- coding:utf-8 -*- __author__ = 'DSOWASP' class B(object): def __init__(self): pass class A(object): def __init__(self): self.name = "ds" age = 18 # 實例()時調用 def __call__(self, *args, **kwargs): print("call") return B() # print(實例)時調用 def __repr__(self): return "__repr__" # 類方法,只能訪問類變量,不能訪問實例變量 @classmethod def talk(cls): print(cls.age) # 不能訪問self.name # 靜態方法不訪問實例變量和類變量,實例.靜態方法()時,不會自動傳入的id。一個方法不要訪問了類和實例變量,但類 # 又要用這個方法時能夠定義爲靜態方法。 @staticmethod def walk(cmd): print("the cmd is :%s"% cmd) # 不訪問self.name和A.age, # 將方法轉爲屬性,方法他時,不帶括號。實例.方法。只有輸出,但不接收輸入時可使用。 @property def shout(self): print("shout:%s"%self.name) return 18 # 這個property.setter裝飾的方法必須是被property裝飾過的方法。 # 不然報錯:TypeError: descriptor 'setter' requires a 'property' object but received a 'function' @shout.setter def shout(self,arg): print("shout:%s, %s"%(self.name,arg)) return 18 a = A() a.walk("uptime") b = a.shout a.shout = 20 print(b)