在类定义时获取初始化前的类名
我想知道有没有办法在定义类属性之前,自动获取类的名称。
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的详细解释,可以查看这个回答。