python __class__屬性


>>> class a(object):
    pass

>>> o=a()
>>> dir(o)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']

>>> o.__class__#對象的類屬性指向類對象
<class '__main__.a'>
>>> type(o.__class__)
<type 'type'>
>>> o.__class__.name

python中一切皆對象,實例通過類屬性就可以調用類的方法。

類方法 @classmethod修飾方式

class A(object):
    def foo(self, x):
        print("executing foo(%s,%s)" % (self, x))
        print('self:', self)
    @classmethod
    def class_foo(cls, x):
        print("executing class_foo(%s,%s)" % (cls, x))
        print('cls:', cls)
    @staticmethod
    def static_foo(x):
        print("executing static_foo(%s)" % x)    
a = A()

普通的類方法foo()需要通過self參數隱式的傳遞當前類對象的實例。 @classmethod修飾的方法class_foo()需要通過cls參數傳遞當前類對象。@staticmethod修飾的方法定義與普通函數是一樣的。

self和cls的區別不是強制的,只是PEP8中一種編程風格,slef通常用作實例方法的第一參數,cls通常用作類方法的第一參數。即通常用self來傳遞當前類對象的實例,cls傳遞當前類對象。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM