gpt4 book ai didi

python - 我们可以在@classmethod 函数中调用用户定义的实例方法吗?

转载 作者:太空宇宙 更新时间:2023-11-04 06:01:31 27 4
gpt4 key购买 nike

我尝试在带有装饰器@classmethod 的方法中调用方法,知道如何实现吗?例如我有:

class A():
def B(self):
#do something
return something

@classmethod
def C(cls):
#do something
x = B() #call B method
return None

我有一个错误:

NameError: global name 'B' is not defined

我可以调用 B 还是将 B 也定义为类方法?

最佳答案

这里的问题不是你的函数是“用户定义的”,问题是“x=B()”没有在你的类中调用一个名为“B”的方法,它调用了一个名为“B”的方法"在全局命名空间中。

为了说明发生了什么,请看这段代码:

B="1"

class A():
B="2"

def myfunc(cls):
print B

a = A()
a.myfunc()

如果您运行它,您会看到输出为 1

如果您将 print 语句更改为 print A.B,您将得到 2

在您的情况下,您需要调用 A.B() 而不是简单地调用 B()

但是,正如其他人所指出的,B() 是一个实例方法。它期望它传递的第一个参数是该类的一个实例。根据 B 所做的事情,您可能会遇到由于没有实例来传递它而导致的问题。您可以通过将一些其他对象(例如类本身)传递给它,或者通过创建一个新对象传递进来,以各种方式解决这个问题;但在我看来,如果 C() 需要调用实例方法,那么 C() 本身应该是一个实例方法。

Difference between Class and Instance methods谈论类和实例方法之间的区别。

关于python - 我们可以在@classmethod 函数中调用用户定义的实例方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24707455/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com