如何在不定义__init__的情况下知道实例变量?

时间:2015-09-18 05:44:39

标签: python instance

让我们考虑以下例子:

class X:
    def run(self):
        print("An example.")

X().run()

输出结果为:

> An example.

但是当我们省略对实例的引用时:

class X:
    def run():
        print("An example.")

X().run()

The output is:
  

TypeError:run()获取0个位置参数,但是给出了1个

当我们实例化类时,__ new __被调用并且实例被创建,好的。但它如何在没有定义__ init __的情况下需要实例? (我很惊讶因为,我总是写__ init __认为它负责定义引用变量的约定/自我名称)。我很困惑。

1 个答案:

答案 0 :(得分:2)

如果您隐式调用instance.run(),则致电run(instance),这就是您收到错误的原因:

  

TypeError:run()获取0个位置参数,但是给出了1个

这也是实例方法应该以{{1​​}}作为第一个参数的原因。

其次,你正在使用旧的方式宣布一个班级 - self
新的方式 1 class X:,但无论你是否使用新/旧注释,调用class X(object):都将返回该类的实例,即使你没有定义X()

第三,如果你想让它成为一个类方法,你可以做Pynchia在上面的注释中建议的内容(使用__init__注释方法)或者通过指定第一个方法将方法声明为类方法参数是@staticmethod并将其注释为类方法:

cls

<子> 1.根据马克在下面的评论,在Python 3中,我们回到了声明一个类的“旧方式”。很高兴知道 - 谢谢马克!