1. 程式人生 > >面向對象補充之方法

面向對象補充之方法

__init__ com cnblogs light 實例 rop 格式 img 屬性。

一、靜態方法 @staticemethod  
只是名義上歸類管理, 實際上在靜態方法裏訪問不了類或實例中的任何屬性。
實例:
class Dog(object):
    ‘‘‘這個類是描述狗這個對象的‘‘‘

    def __init__(self,name):
        self.name = name

    @staticmethod #實際上跟類沒什麽關系了,只是名義上歸類管理, 實際上在靜態方法裏訪問不了類或實例中的任何屬性
    def eat(self):
        print("%s is eating %s" %(self.name,‘d‘))

  
d=Dog(‘doggie‘)
d.eat()

  返回:

技術分享

[email protected],這個動態方法就已經和類沒有什麽關系,self不會自動傳入。

二、類方法 @classmethod  
只能訪問類變量,不能訪問實例變量
實例:
class Dog(object):
    ‘‘‘這個類是描述狗這個對象的‘‘‘
    n=‘我不是實例變量‘

    def __init__(self,name):
        self.name = name

    @classmethod  #只能訪問類變量,不能訪問實例變量
    def p(self):
        print(‘我是類變量,%s‘%self.n)   #註意,此處只能調用類變量,傳入的變量一定要寫成self.var的格式。

    def eat(self):
        print(‘%s is eating...‘%self.name)



d=Dog(‘doggie‘)
d.eat()
d.p()    [email protected]
/* */

  返回:

技術分享

如果上面實例中的d.eat()[email protected],那麽則會返回下面的錯誤:

技術分享




三、屬性方法 @property
把一個方法變成一個靜態屬性

class Dog(object):
    ‘‘‘這個類是描述狗這個對象的‘‘‘

    def __init__(self,name):
        self.name = name

    @property
    def eat(self):
        print(‘%s is eating...‘%self.name)

d=Dog(‘doggie‘)
d.eat  

  返回:

技術分享

註意:[email protected]態屬性,[email protected],執行d.eat,不會調用執行d.eat方法;[email protected],則不能通過d.eat()調用,會返回“TypeError: ‘NoneType‘ object is not callable”。

如果被裝飾的方法中不需要傳入參數,則可以通過d.eat執行。

面向對象補充之方法