如果属性没有值,则Python类属性访问失败

knsnq2tg  于 2023-06-07  发布在  Python
关注(0)|答案(3)|浏览(139)

今天早些时候,我偶然发现了一个我无法完全理解的Python类的行为。
如果我们使用这段代码:

class A:
    a: str

当我测试a的属性访问时,比如A.a甚至A().a,我得到一个AttributeError: type object 'A' has no attribute 'a'
相反,如果我只给予A.a一个值:

class A:
    a: str = 'attribute a'

然后我可以用A.a. # returns "attribute a"访问它。
我不完全理解为什么第一个案例引发了AttributeError

zf2sa74q

zf2sa74q1#

在第一种情况下,您告诉类型检查器将有一个名为astr类型的属性,但您没有设置它。
在第二种情况下,实际上是给a一个值

hlswsv35

hlswsv352#

在Python中,类的属性不是自动定义的。当你用属性“a”创建类“A”时,你声明了有一个新的数据类型“A”,它将有一个值,我将把它称为“a”。你还没有说这个值是什么。
在第二个代码段中,您将'attribute a'的默认值设置为A.a,因此如果您要创建A的示例而不定义a,则它将默认为您的输入。
然而,第一个片段仍然有效。你只需要创建一个类的示例,如下所示:

#create a class
class A:
    a: str

#define your object, and set its parameters
myExample = A() 
myExample.a = "This is my input"

#printing the parameters of your object
print(myExample.a)
kcrjzv8t

kcrjzv8t3#

你不是在声明一个变量,你只是在暗示变量的类型。Python在这里不创建变量。这就是为什么你面对错误。

class A:
    a: str = 'attribute a'

在这里,您创建了一个属性,并为其分配了一个值= 'attribute a'。
因此类型提示不会影响代码的运行时行为。实际属性声明需要赋值

相关问题