IronPython中类实例和静态方法之间的连接

时间:2017-07-19 13:15:30

标签: python ironpython

我有一个关于通过类实例在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个给定)'。是否有可能在类对象和静态方法之间提供连接?或者这没有意义?)

1 个答案:

答案 0 :(得分:1)

A"正常" (非静态)类方法隐含地接收对实例(self)的引用作为第一个参数。

如果将方法定义为静态,则必须明确传递实例:

instance = SomeClass()
instance.SomeMethod(instance, 1)

请注意,self不是一个神奇的关键字,它只是一个惯例。如果更清楚,可以使用该变量的任何其他名称:

def SomeMethod(inst, number):
    return inst._numberValue + number + 10
SomeMethod = staticmethod(SomeMethod)