【发布时间】:2013-01-24 23:52:22
【问题描述】:
所以我有这个问题,我想通过这种方式获取python类的名称:
class TestClass():
myName = (get class name here automatically)
saveDirectory = os.path.join(saveDir, myName) # so i can save it in unique location
def __init__(self):
pass # do something
然而,__class__.__name__ 在创建myName 时似乎还不存在。所以我不得不把它放到__init__() 函数中,像这样:
class TestClass():
def __init__(self):
self.myName = self.__class__.__name__
saveDirectory = os.path.join(saveDir, self.myName) # so i can save it in unique location
pass # do something
但这有一个很大的问题,因为在实例化类之前我无法获得类的名称,我打算为要保存在saveDirectory中的类的每个实例创建几千兆字节的数据,所以它可以以后可以重复使用。所以我实际上不想继续我目前的解决方案。
有没有我想要的类名?还是我只是在做梦?
编辑:
感谢大家的好建议。我将花一点时间来看看元类。否则,我可能会在全局范围内创建一个字典,并引用这些实例化的类。
【问题讨论】:
-
如果您在定义类后尝试获取类的名称,那么常量字符串属性是否足够?如果需要,您可以在子类中更改它
-
如果你总是使用类名,为什么不直接使用字符串呢?类名是静态的,所以没有理由不断要求它。
-
无法从类定义中获取类型名称,因为在解释它时,还没有创建类。
-
你可以在元类或装饰器中做到这一点。但这太疯狂了。实现留给读者作为练习。
-
没有理由在
__init__()中将self.MyName设置为self.__class__.__name__。只需使用self.__class__.__name__!
标签: python