JMRI脚本Jython2.7环境下__init__定义变量类外访问报错求解
问题原因
- 未正确实例化类。代码中
a = MyClass是将MyClass类对象本身赋值给变量a,而非创建类的实例。只有实例化类(调用类时加括号())才会自动执行__init__构造方法,你当前的写法__init__从未被触发,因此不会打印Initialized,也不会生成实例属性y。 __init__方法内部的x引用错误。你直接写self.y = x时,方法局部作用域、全局作用域都找不到变量x,后续即使实例化也会触发NameError,类属性x需要通过MyClass.x(类名调用)或self.x(实例继承调用)的方式访问。
解决方法
修正两处代码问题即可:
- 将类赋值改为类实例化写法,触发构造方法执行
- 修正构造方法内的类属性引用逻辑
修正后的完整代码如下:
class MyClass: """A Test - MyClass is a test""" x=1 def __init__(self): # 修正类属性x的引用 self.y = self.x print 'Initialized' def printMe(self): print self.y # 修正类实例化写法,加括号触发构造方法 a = MyClass() print a.x,a.y,a.__doc__
运行后会先输出Initialized,再正常输出1 1 A Test - MyClass is a test,无报错。
内容的提问来源于stack exchange,提问作者Perry Sugerman
相关产品推荐
相关产品推荐

