[Python]Can we call an user-defined instance method inside a @classmethod function?
一个新手问的问题是,我试着用decorator@classmethod在方法内部调用一个方法,你知道如何实现这一点吗?例如,我有:
1 2 3 4 5 6 7 8 9 10 | class A(): def B(self): #do something return something @classmethod def C(cls): #do something x = B() #call B method return None |
我有个错误:
1 | NameError: global name 'B' is not defined |
我可以调用B吗?或者我也可以将B定义为类方法吗?
这里的问题不是您的函数是"用户定义的",而是"x=b()"不调用类中名为"b"的方法,而是调用全局命名空间中名为"b"的方法。
要说明发生了什么,请查看以下代码:
1 2 3 4 5 6 7 8 9 10 | B="1" class A(): B="2" def myfunc(cls): print B a = A() a.myfunc() |
如果你运行它,你会看到输出是
如果把
在您的情况下,您需要调用
然而,正如其他人指出的,
类方法和实例方法之间的区别说明了类方法和实例方法之间的区别。
要使其工作,您需要这样做:
1 2 3 4 5 6 7 8 9 10 | class A(): def B(self): #do something (with self! so this requires A to be instantiated!) return something @classmethod def C(cls): #do something return cls().B() #instantiate class, call B method, and return results |
类方法是不需要实例数据的方法。如果B需要使用