如何解决Python - 如何从子类实例调用超类的方法?
当子类有与父类方法同名的方法时,子类的方法会覆盖父类的方法。
class Person:
def print(self):
print("Message from Person")
class Student(Person):
def print(self):
print("Message from Student")\
s = Student()
# Method of Student Class Instance
s.print() # Output: "Message from Student"
# I want to call method "print" of Person
# from student Instance
# How can I call it?
s.super().print() # ERROR
super(s).print() # ERROR
解决方法
如果绝对没有办法以任何其他方式访问父类,我想你可以这样做,但我绝对不推荐它:
class Person:
def print(self):
print("Message from Person")
class Student(Person):
def print(self):
print("Message from Student")
s = Student()
# Method of Student Class Instance
s.print() # Output: "Message from Student"
s.__class__.__base__.print(s.__class__.__base__) # Output: "Message from Person"
你必须明白这是超级hacky,你不是在调用实例的方法,就像s.print()
的情况一样,而是在调用一个未实例化的类的方法,一个方法这不是 classmethod
(或 staticmethod
就此而言)并将类作为参数传递给它(即 self
参数)。这是非常不同的语法。
再说一次,给方法不同的名字而不是覆盖它们更有意义。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。