Python继承
在继承关系中,已有的、设计好的类称为父类或基类,新设计的类称为子类或派生类。派生类可以继承父类的公有成员,但是不能继承其私有成员。如果需要在派生类中调用基类的方法,可以使用内置函数super()或者通过“基类名.方法名()”的方式来实现这一目的。
在Python中,如果一个类需要继承另一个类的成员,可以使用以下方式进行定义:
class BaseClass:
def __init__(self):
self.public_member = "I am a public member"
self.__private_member = "I am a private member" # 双下划线开头的成员变量为私有成员
def public_method(self):
print("This is a public method")
def __private_method(self):
print("This is a private method")
class DerivedClass(BaseClass):
def derived_method(self):
# 调用从父类继承的公共成员
print(self.public_member)
# 无法调用父类的私有成员
# print(self.__private_member)
# 调用从父类继承的公共方法
self.public_method()
# 通过super()函数调用父类的方法
super().public_method()
# 无法直接调用基类的私有方法
# self.__private_method()
在以上代码中,BaseClass
是一个基类,DerivedClass
是一个派生类。在 BaseClass
中,定义了一个公有成员 public_member
和一个私有成员 __private_member
,以及一个公有方法 public_method
和一个私有方法 __private_method
。在 DerivedClass
中,继承了 BaseClass
的公有成员 public_member
和公有方法 public_method
,并且定义了一个派生类方法 derived_method
。
在派生类中,我们可以通过继承来使用从基类继承的公共成员和方法,但是无法直接调用基类中的私有成员或方法。如果需要在派生类中调用基类的方法,可以使用内置函数 super()
或者通过“基类名.方法名()
”的方式来实现这一目的。在 derived_method
中,我们展示了如何使用 super().public_method()
来调用基类的 public_method
方法。
Python支持多继承,如果父类中有相同的方法名,而在子类中使用时没有指定父类名,则Python解释器将从左向右按顺序进行搜索。
以下是一个简单的示例代码,用于说明Python支持多继承时的方法解析顺序(MRO)问题:
class A:
def hello(self):
print("Hello from A")
class B:
def hello(self):
print("Hello from B")
class C(A, B):
pass
class D(B, A