如何从子 class 实例访问父 class 实例属性?

How to access parent class instance attribute from child class instance?

在此示例中如何访问 Parent 的姓名?

class Parent:
    def __init__(self) :
        self.name = "toto"
        self.enfant = self.Child()

    class Child:
        def __init__(self) :
            self.child_name="tata"

        def affiche(self):
            print(?? Parent.name) # how to display the parent's name ?

你不能像在 Java 中那样做。 Python 中的嵌套 class 是完全独立的 objects。他们在不知道自己 parent 的情况下生活,事实上,当 class 尸体被处决时,他们看不到自己的 parent。

您的问题的解决方案是在 child 中引用 parent(另外,不要打扰嵌套 classes):

class Child:
    def __init__(self, parent):
        self.child_name = "tata"
        self.parent = parent
        
    def affiche(self):
        print(self.parent.name)

class Parent:
    def __init__(self) :
        self.name = "toto"
        self.enfants = [Child()]

如果把Child嵌套到Parent中,还是照原样写,调用构造函数为self.Child(self).


您可能需要查看以下问题以获取更多信息:

  • Nested classes' scope?

正如我在 中所说,除了其中一个的定义嵌套在另一个的命名空间中之外,您的两个 class 之间没有特殊关系。为了做你想做的事,你需要明确地“告诉” Child class 它的 parent 是谁,在构造一个实例时将它作为参数传递 - 和如果以后想在其他方法(如 affiche().

中使用它,则需要显式保存该值

我的意思是:

class Parent:
    def __init__(self) :
        self.name = "toto"
        self.enfant = self.Child(self)  # Pass self as parent argument.

    class Child:
        def __init__(self, parent):
            self.parent = parent  # Remember parent.
            self.child_name="tata"

        def affiche(self):
            print(self.parent.name) # Display the parent's name.


parent = Parent()
parent.enfant.affiche()  # -> toto