继承在 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.
我是 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.