我有一个关于通过类实例在IronPython中调用静态方法的问题。让我们说我有下一个静态方法:
class SomeClass(object):
def SomeMethod(number):
return number + 10
SomeMethod = staticmethod(SomeMethod)
我可以通过类实例调用此方法而不会出现任何问题:
instance = SomeClass()
instance.SomeMethod(1)
但是当我想通过静态方法从self对象返回一些值的情况呢。考虑下一种情况:我在构造函数中使用一些值初始化此类对象的字段,并希望从静态方法返回此值。然后我应该以某种方式提供我的对象和我的静态方法之间的依赖。我的班级看起来像这样:
class SomeClass(object):
def SomeMethod(self, number):
return self._numberValue + number + 10
SomeMethod = staticmethod(SomeMethod)
def __init__(self):
self._numberValue = 10
我尝试以完全相同的方式调用我的静态方法:
instance = SomeClass()
instance.SomeMethod(1)
但后来我得到了错误:' SomeMethod()正好接受2个论点(1个给定)'。是否有可能在类对象和静态方法之间提供连接?或者这没有意义?)
答案 0 :(得分:1)
A"正常" (非静态)类方法隐含地接收对实例(self
)的引用作为第一个参数。
如果将方法定义为静态,则必须明确传递实例:
instance = SomeClass()
instance.SomeMethod(instance, 1)
请注意,self
不是一个神奇的关键字,它只是一个惯例。如果更清楚,可以使用该变量的任何其他名称:
def SomeMethod(inst, number):
return inst._numberValue + number + 10
SomeMethod = staticmethod(SomeMethod)