Python 为什么self.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

我试图创建一个类,在创建该类的实例时(不为该类定义方法),该类将执行一些代码。但是,我想在上述代码中使用类实例的“name”属性

这是我的代码:

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
,而不是全局范围。