標籤:div error assm 不能 賦值 sel stat 返回 影響
話不多說,直接上程式:
a = 111class A(object): a = 1 def f_instance(self): print self.a @staticmethod def f_static(): print a @classmethod def f_class(cls): print cls.aaaa = A()A.f_class #1A().f_class #1aaa.f_class #1A.f_static() #111A().f_static() #111aaa.f_static() #111A.f_instance() # TypeErrorA().f_instance() #1aaa.f_instance() #1f_static() #NameErroraaa.a = 2A.f_class() #1A().f_class() #1aaa.f_class() #1A.f_static() #111A().f_static() #111aaa.f_static() #111A.f_instance() # TypeErrorA().f_instance() #1aaa.f_instance() #2f_static() #NameErrorA().a = 2; aaa.a=1 #基於上一步的賦值A.f_class() #1A().f_class() #1aaa.f_class() #1A.f_static() #111A().f_static() #111aaa.f_static() #111A.f_instance() # TypeErrorA().f_instance() #1aaa.f_instance() #1f_static() #NameErrorA.a = 10 #基於上一步的賦值A.f_class() #10A().f_class() #10aaa.f_class() #10A.f_static() #111A().f_static() #111aaa.f_static() #111A.f_instance() # TypeErrorA().f_instance() #10aaa.f_instance() #1f_static() #NameError
總結如下:
靜態方法 : 和在類外面 定義的方法 效果一樣,只不過該方法是類專有的,在外部不可直接存取。類和執行個體都可以調用。
類方法 : 相當於所有的 該類的 執行個體的 “黨章”,它的改變 能夠影響 之後新的執行個體中的 執行個體屬性,但是對舊的執行個體(在類屬性改變之前所定義的執行個體)沒有影響。執行個體也可以調用該方法,和類調用的效果相同,返回的是類屬性。
執行個體方法:只能在執行個體化之後被調用,只能影響執行個體屬性,不能影響類屬性,並且執行個體屬性在被執行個體化之後不受類方法的影響,執行個體化之後也不因類屬性改變而改變。類不可以調用,會返回TypeError。
python的靜態方法、類方法與執行個體方法