在类定义时获取初始化前的类名

2 投票
1 回答
1267 浏览
提问于 2025-04-22 00:13

我想知道有没有办法在定义类属性之前,自动获取类的名称。

class MyClass(object):
    attribute1 = 1
    attribute2 = 2 # This a simple example, MyClass has many other attributes
    print className # normally one would use self.__class__.__name__ but self or cls are not defined at the level

    def __init__(self):
        a = 1

目的

在我正在使用的框架中,attribute1 和 attribute2 是对象实例(你可能会说在 Python 中一切都是面向对象的 :))。我想在 MyClass 初始化之前,将类名设置给这些属性。因为 MyClass 会被初始化很多次,而且它的属性远不止两个,这样每次初始化时都去做这个操作会非常耗时。

暂无标签

1 个回答

0

一个 metaclass( metaclass)可以用来在类初始化之前设置一个属性,这个属性的值是类的名字:

class MyClassMeta(type):
    def __init__(self, name, bases, attrs):
        super(MyClassMeta, self).__init__(name, bases, attrs)
        # Set class_name to the name of our class; in this case "MyClass"
        self.class_name = name

class MyClass(object):
    __metaclass__ = MyClassMeta

    def __init__(self):
        # Prints "MyClass"
        print(self.class_name)

想了解更多关于metaclass的详细解释,可以查看这个回答

撰写回答