继承在 Python 中的工作原理

How Inheritance works in Python

我是 Vikki,我正在努力学习 python。 我有以下查询, 我有一个基地 class

class Parent: 
     def returnsString(self, str):
          return self.txt

类似地,父级 class 中几乎没有其他功能,例如 returnInt、returnBool 等

现在我创建了其他 class :

class Child(Parent):
   def main():
   obj = Child()
   print('Trying Inheriting here : ',obj.returnsString())

AttributeError: 'Child' object has no attribute returnsString

现在,在 Java 中,当我们扩展 class 时,我们可以直接访问基础 class 方法和对象,但如果我是 python尝试类似的方法我无法这样做。

如果每次我必须重写函数时我们都可以访问基 class 或 python 中的所有方法和属性,有人可以指导我吗, 有人可以帮我解决这个问题吗?

此代码中的当前错误是您自己调用了 Child() 方法。 obj = Child() 这意味着您实例化了自身的副本,而不是父 class 对象,这在我看来不是很好的做法。如果您想从同一对象访问其他项目,请考虑明确声明 self.<insert item name> 这会提高可读性和清洁度。

您可能需要的任何其他内容在 here 中都非常详细,python.org 参考资料是您获得答案的最佳选择。

PS。不要考虑 classes,它们的方法可能会从 py2 到 py3 发生显着变化。我考虑过py3下的答案。

PPS。使用以下代码并再次 运行 它。

obj = Parent;

PPPS。始终尝试写下换行符。这对初学者来说更好,解释器可能会给你更清晰的错误报告。

您的代码中有一些错误。 首先,您的 BaseClass 定义对我来说含糊不清。 self.txt 属性赋值在哪里?您没有定义构造函数,您应该在其中初始化所有属性。还。您实际上并不需要 returnsString 方法的 str 参数,因为您所做的只是 return self.txt 的值。 尝试这样的事情:

class Parent: 
    def __init__(self):
        self.txt = "Base class str."

     def returnsString(self):
          return self.txt

如果您不想在派生 class 中重载任何内容,它的定义可能如下所示:

class Child(Parent):
    pass

有了这个设置,您现在可以测试您的 returnsString 方法:

def main():
    obj = Child()
    print('Trying Inheriting here : ', obj.returnsString())

if __name__ == '__main__':
    main()

执行您的 Python 脚本的输出将是:

Trying Inheriting here : Base class str.