gpt4 book ai didi

python - 为什么我不能在python中访问这个类成员?

转载 作者:太空宇宙 更新时间:2023-11-03 12:22:25 26 4
gpt4 key购买 nike

我有以下代码

class Transcription(object):
WORD = 0
PHONE = 1
STATE = 2

def __init__(self):
self.transcriptions = []

def align_transcription(self,model,target=Transcription.PHONE):
pass

这里的重要部分是我希望有一个类成员作为变量的默认值。然而,这会产生以下错误:

NameError: name 'Transcription' is not defined

为什么这是不可能的,什么是正确的(pythonic)方式来做这样的事情。

最佳答案

您无法访问它,因为 Transcriptiondef 语句运行时未定义。

 def align_transcription(self,model,target=PHONE):
pass

会成功的。 PHONE 名称在 class 语句执行完成后 将成为 Transcription 类的命名空间中可用。

它的工作方式是 class 是一个 实际运行 的语句。当 Python 遇到 class 语句时,它会进入一个新的局部范围并执行 class 语句下缩进的所有内容,就好像它是一个函数一样。然后它将生成的命名空间、类的名称和基类的元组传递给默认为 type元类。元类返回其自身的一个实例,它是实际的类。 def 语句执行时,这些都没有发生。

声明

class Foo(object):
a = 1
def foo(self):
print self.a

创建一个命名空间ns = {'a': 1, 'foo': foo} 然后执行

Foo = type('Foo', (object,), ns)

这相当于

def foo(self):
print self.a

Foo = type('Foo', (object,), {'a': 1, 'foo': foo})

您可以清楚地看到 Foo 在定义 foo 时没有定义,因此 Foo.a 没有意义。

关于python - 为什么我不能在python中访问这个类成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4655745/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com