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