2012-07-02 33 views
0

我關於我一直在看的一些代碼的一些問題。 @staticmethod@property在Python中的方法定義之上寫入時的含義如下所示?基本的Python方法定義

@staticmethod 
def methodName(parameter): 
    Class_Name.CONSTANT_VARIABLE = parameter 

@property 
def methodName(parameter): 
    Class_Name.CONSTANT_VARIABLE = parameter 
+7

文檔? [staticmethod](http://docs.python.org/release/3.1.5/library/functions.html#staticmethod),[property](http://docs.python.org/release/3.1.5/library /functions.html#property) – jdi

+2

檢查出[鏈接](http://stackoverflow.com/questions/739654/understanding-python-decorators) –

回答

2

裝飾器語法是此模式的簡寫。

def methodName(parameter): 
    Class_Name.CONSTANT_VARIABLE = parameter 
methodName = some_decorator(methodName) 

可以重新安排這樣

@some_decorator 
def methodName(parameter): 
    Class_Name.CONSTANT_VARIABLE = parameter 

一個優點是,它坐落在函數的頂部,所以很顯然,這是一個裝飾功能

你是不是也問什麼是靜態方法和屬性?

+0

非常感謝您的幫助,但我想我也問什麼staticmethods和屬性是。 –

0

A staticmethod只是一個已包含在類定義中的函數。不像常規方法,它不會有一個self參數。

A 屬性是一種在屬性查找時運行的方法。屬性的主要目的是支持屬性查找,但實際上像運行方法調用一樣運行代碼。

+0

非常感謝Raymond。爲了澄清,是否在調用類的靜態方法時使用靜態方法來更改類變量的原因之一?另外,你的意思是「一個屬性是一種在屬性查找時運行的方法?」過去6個月,我一直在學習如何編程,並且從未聽說過這個消息。我在這裏先向您的幫助表示感謝! –

+0

靜態方法用於不需要訪問實例或類本身的功能(這就是爲什麼靜態方法的參數列表中沒有* self *或* class *的原因)。因此,靜態方法不用於改變類變量(他們甚至不知道它們所在的類)。 –

+0

然後用什麼方式實際使用靜態方法?例如,你可以用它來改變一個類CONSTANT嗎?謝謝! –

1

有一個樣本代碼

class Class1(object): 
    def __init__(self): 
     self.__x = None 

#  you can call this method without instance of a class like Class1.method1() 
    @staticmethod 
    def method1(): 
     return "Static method" 

    def method2(self): 
     return "Class method" 

    @property 
    def x(self): 
     print "In getter" 
     return self.__x 

    @x.setter 
    def x(self, value): 
     print "In Setter" 
     self.__x = value