python class with mixed @classmethod and methods
嗨,我正在与不同的合作者一起开发一个项目中的类。我已经能够用不同的方法实现类,并且所有的方法都正常工作。基本上我的现状是
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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 2 | [1]: x=MyClass(a,b,c) [2]: y=x.one() |
类被插入到一个更大的项目中,其他合作者希望直接调用一个不带Isance的项目作为
1 2 3 | [1]: y = MyClass.one(a,b,c) [2]: z = MyClass.two(a,b,c) [3]: x = MyClass.three(a,b,c) |
我知道我可以通过使用像@classmethod这样的装饰器来获得它。比如说一个我喜欢的
1 2 3 4 5 | @classmethod def one(cls, a, b, c): d = self.two() e = self.three() cos(2*d+3*e) |
但这实际上不起作用,因为它会引发一个错误,因为自我并没有被定义。我的问题是,如果我没有创建实例,@class method如何调用同一类中的另一个方法。顺便说一句,我正在开发python 2.7谢谢你的提示。我试图搜索各种@classmethod问题,但没有找到答案(或者我可能不理解)。
您将参数重命名为
1 2 3 4 5 | @classmethod def one(cls, a, b, c): d = cls.two() e = cls.three() cos(2*d+3*e) |
工作原理与
1 2 3 4 5 | @classmethod def one(we_need_more_unicorns, a, b, c): d = we_need_more_unicorns.two() e = we_need_more_unicorns.three() cos(2*d+3*e) |
或者像