Python 获取变量所在的类
假设我有这样的东西-Python 获取变量所在的类,python,inheritance,Python,Inheritance,假设我有这样的东西- class A(object): c = C() class B(A): pass class C(object): def __init__(self): pass def get_parent_class(self): # This should return B 我将如何实现get_parent_类,以便它可以按以下方式工作- B.c.get_parent_class() # Returns th
class A(object):
c = C()
class B(A):
pass
class C(object):
def __init__(self):
pass
def get_parent_class(self):
# This should return B
我将如何实现get_parent_类,以便它可以按以下方式工作-
B.c.get_parent_class() # Returns the class type B (not the instance b!)
这可能吗
在我们的示例中,我基本上有一个父类class a,它在示例中包含一个变量var c。然后我有一个子类B,它继承了
我想使用C在B上公开的函数,但为了正确使用,我需要C知道它在B上运行
希望我在最后的解释中没有把事情复杂化
编辑-
请注意,我不是想得到C类,这是一个简单的C类。我需要一个持有c的班级
谢谢 您可以查看对象的____;基属性。它返回一个对象的基类元组
您可以在文档中看到它。您可以从name属性中获取类,例如:
>>> import itertools
>>> x = itertools.count(0)
>>> x.__class__.__name__
'count'
或者这样:
>>> type(x).__name__
'count'
好吧,你不能那样做 B.c只返回对c对象的引用。同一对象可以是列表的成员,也可以是另一个类(如D)和另一个类(如E)的实例的成员 只需在您的示例中添加以下内容:
class D:
def __init__(self, c):
self.c = c
class E:
c = C()
然后:
>>> c = B.c
>>> E.c = c
>>> d = D(c)
>>> c.a = 1
>>> B.c.a
1
>>> d.c.a
1
>>> E.c.a
1
此时,c对象本身并不知道它属于B、d和E。c.get\u parent\u类应该返回什么?如何在B和E之间作出决定
您可以尝试让C了解其容器:
class C(object):
def __init__(self, clazz):
self.clazz = clazz
def get_parent_class(self):
return self.clazz
class A(object):
c = C(A)
你会得到一个A.c.get\u parent\u类,但是由于它是同一个对象,B.c.get\u parent\u类也会给出…c=c引发一个异常,因为c还没有定义。@Stiffo的可能重复:不是重复的OP想要包含c的类的类名,不是c的类名,也不是它的任何父类。