当子类具有与父类中的方法同名的方法时,子类的方法将覆盖父类的方法。
在子类的定义中,可以通过访问父类的方法super()
。
然后,是否可以从子类实例访问父类的方法?
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
参数)传递给它。这是非常不同的语法。
再者,给方法赋予不同的名称而不是覆盖它们是更有意义的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句