微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python - 如何从子类实例调用超类的方法?

如何解决Python - 如何从子类实例调用超类的方法?

当子类有与父类方法同名的方法时,子类的方法会覆盖父类方法

在子类的定义中,可以通过super()来访问父类方法

那么,是否可以从子类Instance访问父类方法

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 举报,一经查实,本站将立刻删除。