0

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

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

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

4

2 回答 2

5

您正在定义一个类,因此没有实例可以指向外部方法。删除 `self:

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

self指向实例,而不是类。您要么需要创建一个实例并直接分配给属性 ( test().str = 'xyz') ,要么需要在方法内部(何时self可以实际引用实例)。

于 2013-03-21T11:12:43.993 回答
0

self不是python中的特殊名称,您可以使用\

class test(object):
    def __init__(foo):
        foo.lst = []

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

于 2013-03-21T11:14:29.623 回答