为什么不能在对象方法之外创建对象属性?

时间:2013-03-21 11:11:52

标签: python

在研究python类属性和实例属性时,我开始知道在对象方法之外创建对象属性(或者可能是类方法)。像下面的代码将在python中生成“NameError”。

class test(object):
    def __init__(self):
        self.lst = []
    self.str = 'xyz'

为什么python不允许这样?我不是在质疑语言创造者的决定,而是背后的任何理由。比如,在技术上是不正确的还是这种行为的任何其他缺点。

2 个答案:

答案 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 = []

如果你想。类的每个方法都将实例显式传递给它作为第一个参数,您可以随意调用它。试图访问方法范围之外的参数显然不起作用。