0
嗨我正在與不同的協作者在一個項目中開發一個類。我已經能夠用不同的方法實現這個類,並且所有工作都正常。基本上我現在的情況是下面python類與混合@classmethod和方法
class MyClass(object):
def __init__(self,a,b,c):
self.a = a
self.b = b
self.c = c
def one(self,**kwargs):
d = self.two()
e = self.three()
# make something using a an b like
return 2*d + 3*e
def two(self,**kwargs):
# this uses a for example
return self.a*2 + self.b**self.c
def three(self, **kwargs):
# this uses b and c
return self.b/self.c - self.a/3
這些顯然例子,還有更多複雜的東西怎麼回事。問題是,這個類只能通過
[1]: x=MyClass(a,b,c)
[2]: y=x.one()
類插入一個更大的項目和其他合作者想直接調用一個沒有istance作爲
[1]: y = MyClass.one(a,b,c)
[2]: z = MyClass.two(a,b,c)
[3]: x = MyClass.three(a,b,c)
我一個實例調用知道我可以通過使用裝飾器(如@classmethod)來獲得此信息。例如,對於一個我不喜歡
@classmethod
def one(cls, a, b, c):
d = self.two()
e = self.three()
cos(2*d+3*e)
但其實這不工作,因爲它是自沒有定義引發錯誤。我的問題是,我不明白如果我沒有創建實例,@classmethod如何調用另一個屬於同一類的方法。順便說一句我正在研究python 2.7 感謝您的任何線索。我試着在各種@classmethod問題搜索,但沒有找到答案(或者也許我沒有理解它)
*「我不明白@classmethod如何調用另一個屬於同一類的方法」* - 通過'cls'訪問它。 'self'不是類方法的一部分(就像你從簽名中看到的那樣),你可以訪問* class *,而不是* instance *。 – jonrsharpe
如果你沒有實例調用它,你期望'a','b'和'c'來自哪裏? – user2357112
你是對的我知道。對不起,如果問題太簡單了,拼寫錯誤 –