gpt4 book ai didi

python - 将类的名称传递给函数,在方法之外分配给类属性

转载 作者:行者123 更新时间:2023-11-28 20:55:52 27 4
gpt4 key购买 nike

python 3.7:

我有一个类定义,其中根据类名为类属性分配一个值,该值在类内的装饰器中使用。

我正在寻找“当前正在定义的类”的代词。

这是一个例子:

class MyClass:

# NameError: name '__class__' is not defined
class_logger = find_logger(__class__.__name__)

# __init__ is not important
def __init__(self):
# This works!
self.logger = find_logger(__class__.__name__)

@mydecorator(class_logger)
# mymethod is not important
def mymethod(self):
return 1

“当前正在定义的类”的合适代词是什么?

(这类似于 How to get the current Python class name in __init__ regardless of the class of "self"? ,但那里的问题是“在 init 的定义中”,当时是针对 2.7 的。Python 3.x 解决了该问题。)

最佳答案

当类定义尚未完成评估时,不能保证类对象存在并且可供用户访问。即使它可以访问,它也可能未初始化到您可以用它做任何有用的事情。

也就是说,您也许可以获得类(class)的名称。 __qualname__是一个包含 qualified name 的属性类/函数/方法/描述符/生成器实例。您应该能够从类的定义中访问它。

class Fred:
print("Fred's qualname:", __qualname__)
class Barney:
print("Barney's qualname:", __qualname__)

结果:

Fred's qualname: Fred
Barney's qualname: Fred.Barney

如果您的类未在文件级别定义,您可能需要进行一些字符串操作以将其名称与路径的其余部分分开。例如,将上面的示例更改为 print("Barney's qualname:", __qualname__.rpartition(".")[-1]) 以仅获取“Barney”而不是“Fred.Barney”。


尽管我尽了最大努力,但我找不到明确确认 __qualname__ 在作为常规名称而非属性访问时具有合理值的文档。我不完全相信这是定义明确的行为,所以我认为我不能毫无保留地认可它用于生产质量代码。

关于python - 将类的名称传递给函数,在方法之外分配给类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55713255/

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