混合@classmethod和方法的python类

混合@classmethod和方法的python类,python,Python,嗨,我正在和不同的合作者一起开发一个项目中的课程。我已经能够用不同的方法实现这个类,并且一切都正常工作。基本上我目前的情况如下 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

嗨,我正在和不同的合作者一起开发一个项目中的课程。我已经能够用不同的方法实现这个类,并且一切都正常工作。基本上我目前的情况如下

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)
我知道我可以通过使用decorator(比如@classmethod)来实现这一点。举个例子,我很喜欢

@classmethod
def one(cls, a, b, c):
    d = self.two()
    e = self.three()
    cos(2*d+3*e)
但这实际上不起作用,因为它会引发一个错误,因为self没有定义。我的问题是,如果我没有创建实例,我不理解@classmethod如何调用同一类中的另一个方法。顺便说一句,我正在研究Python2.7
谢谢你提供任何线索。我试图搜索各种@classmethod问题,但没有找到答案(或者可能我不理解)

您将参数重命名为
cls
,因此您也必须将函数体中的
self
更改为
cls
。名称
self
cls
只是普通标识符,这是一种约定,不同于C++的
this

@classmethod
def one(cls, a, b, c):
    d = cls.two()
    e = cls.three()
    cos(2*d+3*e)
工作原理与

@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)

或者更合理的标识符,如
Cls
(用大写字母C表示它是一个类),有时也会看到。

“我不明白@classmethod如何通过
Cls
访问它来调用同一类中的另一个方法”
self
不是类方法的一部分(从签名中可以看到…),您可以访问类,而不是实例。如果您在没有实例的情况下调用它,您希望
a
b
c
来自哪里?我知道您是对的。对不起,如果问题太简单,而且拼写错误,您的应用程序中是否只有一个
MyClass
实例?不,原则上我可以调用MyClass的不同时间(使用不同的a、b和c值)