在研究python类属性和实例属性时,我开始知道在对象方法之外创建对象属性(或者可能是类方法)。像下面的代码将在python中生成“NameError”。
class test(object):
def __init__(self):
self.lst = []
self.str = 'xyz'
为什么python不允许这样?我不是在质疑语言创造者的决定,而是背后的任何理由。比如,在技术上是不正确的还是这种行为的任何其他缺点。
答案 0 :(得分:5)
您正在定义一个类,因此没有实例指向外部方法。放弃`self:
class test(object):
def __init__(self):
self.lst = []
str = 'xyz'
self
指向实例,而不是类。您需要创建一个实例并直接分配给需要在方法中的属性(test().str = 'xyz'
)或(当self
实际可以引用实例时)。< / p>
答案 1 :(得分:0)
self
在python中不是特殊名称,您可以使用\
class test(object):
def __init__(foo):
foo.lst = []
如果你想。类的每个方法都将实例显式传递给它作为第一个参数,您可以随意调用它。试图访问方法范围之外的参数显然不起作用。