Python 为什么self.name会出现名称错误?
我试图创建一个类,在创建该类的实例时(不为该类定义方法),该类将执行一些代码。但是,我想在上述代码中使用类实例的“name”属性 这是我的代码:Python 为什么self.name会出现名称错误?,python,python-3.x,Python,Python 3.x,我试图创建一个类,在创建该类的实例时(不为该类定义方法),该类将执行一些代码。但是,我想在上述代码中使用类实例的“name”属性 这是我的代码: foo类: 定义初始化(self,name): self.name=名称 打印(self.name) x=foo(“它起作用了”) Python引发了一个NameError,并表示未定义名称“self” 我不明白我的代码有什么问题。因为您在全局范围内没有self自我仅在方法中定义 因此,您需要在定义x后移动打印,并访问x,而不是self self
foo类:
定义初始化(self,name):
self.name=名称
打印(self.name)
x=foo(“它起作用了”)
Python引发了一个NameError,并表示未定义名称“self”
我不明白我的代码有什么问题。因为您在全局范围内没有
self
<代码>自我仅在方法中定义
因此,您需要在定义x
后移动打印,并访问x
,而不是self
self
只能在init方法内部使用。您需要使用“名称”来访问它。这看起来像是缩进问题:
class foo:
def __init__(self, name):
self.name = name
print(self.name)
x = foo('it works')
self只需在类定义中定义。在代码中,它不在类范围内。如果要在创建实例后访问name属性,则代码如下:
x = foo('it works')
print(x.name)
这里的主要问题是缩进,请修复它。我试图将print语句放在类内部,但放在init外部。这没有任何意义
self
只是一个常规参数,它是方法的局部变量。在类范围中,self
会引用什么实例?“创建一个在创建类的实例时将执行某些代码的类”最合理的方法是将该代码放入\uuuu init\uuuu
中。这就是\uuuuu init\uuuuuu
的含义。@juanpa.arrivillaga的要点是每次创建所述类的实例时都要执行一些代码。要执行的代码需要使用传递来创建类实例的变量,因此我需要使用self。name@oatless好啊就像我说的,你想在\uuuuu init\uuuu
中这样做,为什么你不想在\uuuuu init\uuuu
中这样做呢?事实上,问题是self
在类作用域中被使用,而它只存在于\uuuuu init\uuu
的本地作用域中。这是真的,尽管我认为op试图访问类范围(即类主体)中的self
,而不是全局范围。