【问题标题】:How can I get self. variable from a parent class?我怎样才能得到自我。来自父类的变量?
【发布时间】:2021-10-10 19:00:19
【问题描述】:

这可能是一个非常糟糕的例子,但我是 OOP 的新手,我试图在不再次调用 random.randint 的情况下获得我在 random_number 中创建的相同 self.number list。但是当我在class B 内部调用时,self.number 是空的,正确的方法是什么?

import random
class A:
    def __init__(self):
        self.number = []

    def random_number(self):
        for i in range(4):
            self.number.append(random.randint(1, 100))
            random.randint(1, 100)

        print("from class A", self.number)

class B(A):
    def __init__(self):
        super().__init__()
        # something here

    def get_name(self):
        A().random_number()
        print("from class B", self.number)

B().get_name()

【问题讨论】:

  • 和问题无关,但是为什么你的一行只有random.randint(1, 100)
  • 你是什么意思叫它再次?我只看到一个电话给.random_number()
  • 只需将A().random_number() 更改为self.random_number()。问题是 A().random_number() 正在为新对象调用 random_number。
  • 我不是 100% 清楚您要做什么,但似乎您可能希望 number 成为类属性而不是实例属性。
  • 这里有一个关于继承的有用教程:w3schools.com/python/python_inheritance.asp

标签: python python-3.x list oop


【解决方案1】:

执行A().random_number() 将创建A 类的新实例,然后调用该新创建实例的random_number 方法,这显然不是您想要的。

您需要从类B的实例中访问该方法,并且由于您正在扩展类A以创建类B,因此您可以将父类方法直接用于子类即@987654327 @:

import random
class A:
    def __init__(self):
        self.number = []

    def random_number(self):
        for i in range(4):
            self.number.append(random.randint(1, 100))
            random.randint(1, 100)

        print("from class A", self.number)

class B(A):
    def __init__(self):
        super().__init__()
        # something here

    def get_name(self):
        # A().random_number()
        self.random_number()   #<--- calling self.random_number()
        print("from class B", self.number)

B().get_name()

输出:

from class A [16, 24, 100, 47]
from class B [16, 24, 100, 47]

【讨论】:

  • 调用random_number()方法时不需要使用super()。方法是继承的。
  • 是的,我只是在修改答案
  • 你永远不会调用super().random_number(),除非当前类中有阴影方法并且你需要绕过它。在这里提到它只会增加混乱。
  • 那也是True,我刚刚删除了包含super的整个部分
  • "新创建的类"->"新创建的instance"
猜你喜欢
  • 2014-05-17
  • 1970-01-01
  • 2016-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多