Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取变量所在的类_Python_Inheritance - Fatal编程技术网

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的类名,也不是它的任何父类。