gpt4 book ai didi

python - 如何添加或更改类(而不是实例)?

转载 作者:太空宇宙 更新时间:2023-11-03 17:21:39 28 4
gpt4 key购买 nike

我想直接为类对象设置属性,而不创建实例,例如有一个可以访问的替代名称,例如 __ name __ 属性:

class Foo:
pass

> Foo.__name__
Foo

但这不起作用:

some_file.py:

class Foo:
alternativ_name = __name__ + "_ending"

print(Foo.alternativ_name)

打印:

__main___ending

如果我在交互式控制台中尝试它,它会再次返回其他内容:

>>> class Foo:
... alt_name = __name__ + "_ending"
...
>>> Foo.alt_name
'builtins_ending'

我想要实现的是:

class Foo:
alt_name = __name__ + "_ending"
Foo.alt_name

应该返回:

'Foo_ending'

我该怎么做?

最佳答案

变量__name__Foo.__name__实际上指向两个不同的东西。在 Foo 类中使用 __name__ 仍然使用全局变量,而不是 Foo.__name__

在类内,不可能显式引用同一个类:

class Foo:
alt_name = Foo.__name__ + "_ending"
# raises NameError: name 'Foo' is not defined

如果您想要对象上的属性,您可以在运行时执行此操作,例如在__init__中。如果您确实想要类本身的属性,则可以使用元类来实现:

class Foo:
class __metaclass__(type):
@property
def alt_name(cls):
return cls.__name__ + "_ending"

关于python - 如何添加或更改类(而不是实例)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33080128/

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