【发布时间】:2019-02-19 00:17:52
【问题描述】:
有没有一种方法可以在类方法中使用实例变量来执行计算?
非常简单,这是我正在尝试做的:
class Test:
def __init__(self, a):
self.a = a
@classmethod
def calculate(cls, b):
return self.a + b
【问题讨论】:
-
类方法中没有
self。您的方法作为普通的实例方法可以很好地工作。为什么要在圆孔中推方钉?即,如果您正在对实例进行计算,为什么您认为应该有一个类方法?您的“非常简化”可能过于简化而无法理解 - 我所看到的只是错误的代码,可以通过删除@classmethod并将cls替换为self来轻松修复。 -
该方法中应该使用哪个实例的
.a?您没有首选的self实例,但如果您确实需要,可以将一个实例(或多个实例)作为显式参数传递给类函数。 -
描述符协议明确允许这样做;点运算符将使用实例和类访问描述符的
__get__方法。见docs.python.org/3/howto/descriptor.html#functions-and-methods。 -
@Amadan 我最初的问题是在类的 init 中实例化一个文件名,然后在类方法中使用该文件名来懒惰地获取一个可用于所有对象实例的 pandas 数据帧一旦打开(以节省内存)
标签: python instance-variables class-method