获取另一个类在Python中实例化的类的名称

获取另一个类在Python中实例化的类的名称,python,python-3.x,class,oop,Python,Python 3.x,Class,Oop,是否可以在第一个类中实例化的另一个类中获取python类的名称 让我给你举个例子 类子类: top_level_name=None#名称类它在例如TopLevelClass中实例化 类别TopLevelClass: 子类=子类() 我知道我可以写以下内容 类子类: 定义初始化(自身,类名称): self.top\u level\u name=类名称 类别TopLevelClass: 子类=子类(类名称) 定义初始化(自): self.class\u name=self.\u class\u.\

是否可以在第一个类中实例化的另一个类中获取python类的名称

让我给你举个例子

类子类:
top_level_name=None#名称类它在例如TopLevelClass中实例化
类别TopLevelClass:
子类=子类()
我知道我可以写以下内容

类子类:
定义初始化(自身,类名称):
self.top\u level\u name=类名称
类别TopLevelClass:
子类=子类(类名称)
定义初始化(自):
self.class\u name=self.\u class\u.\u name__

但是,在初始化类时不需要将类名作为参数传递,这样做会更好


这是可能的,只是一厢情愿的想法,还是一个非常糟糕的想法,因为我还没有想到的原因。

我建议重新审视这两个类的设计。让实例化类知道调用类违反了封装和抽象的设计原则。它还创建一个循环依赖项(在这种情况下,只有逻辑依赖项,因为只有类的名称是已知的)。如果您使用类名作为实例化类的某种标识符,您可以像在示例中一样在构造函数中传递id字符串。

据我所知,您想知道在哪个类中创建了类实例?@小心uu是的。这就是我想做的。所以我可以想到两种方法:第一->第二->元类,因为类本身只是某个元类的实例,元类可以实现您需要的特殊初始化。但是,在初始化类时不需要将类名作为参数传递,这样做会很好。“但这将是最直接、最明确的方式。你可以按照你的建议去做,但这可能会涉及到对调用堆栈和所有其他类型的元编程的探索,这些元编程完全是过度工程化的,没有什么明显的好处(事实上,从我的角度来看,这会更糟,非惯用的和非显式的“魔法”)。也可能很难创建一个健壮的解决方案。