【发布时间】:2020-01-26 02:24:12
【问题描述】:
是否可以在第一个类中实例化的另一个类中获取python类的名称。
让我举个例子。
class SubClass:
top_level_name = None # name class it is instantiated in e.g. TopLevelClass
class TopLevelClass:
subclass = SubClass()
我知道我可以写以下...
class SubClass:
def __init__(self, class_name):
self.top_level_name = class_name
class TopLevelClass:
subclass = SubClass(class_name)
def __init__(self):
self.class_name = self.__class__.__name__
但是,在初始化类时不需要将类名作为参数传递,这样做会很好。
这可能吗,只是一厢情愿,或者出于某种我还没有想到的原因,这是一个非常糟糕的主意。
【问题讨论】:
-
据我了解,您想知道在哪个类中创建了类实例?
-
@Take_Care_ 是的。这就是我想做的。
-
所以我能想到两种方法:第一种 -> docs.python.org/3/reference/datamodel.html#object.__set_name__
-
Second -> 元类,因为类本身只是某个元类的一个实例,元类可以像你需要的那样实现特殊的初始化。
-
"但是,在初始化类时不需要将类名作为参数传递,这样做会很好。"但这将是最直接和最明确的方法。你可以做你提议的事,但它可能会涉及自省调用堆栈和所有其他类型的元编程,这将完全过度设计某些东西而没有明显的收益(实际上,它会更糟糕 从我的角度来看,非惯用和非明确的“魔法”)。也可能很难创建一个强大的解决方案。
标签: python python-3.x class oop