\section{继承和多态}继承(inheritance)允许开发人员先创建一个通用的类,然后扩展为特定类。使用继承机制,我们可以获得类的数据字段和方法,还可以增加自定义的字段和方法,因此,继承提供了一种组织代码、重用代码的方式。在面向对象的术语中,当类X继承自类Y时,Y被叫做超类(super class)或基类(base class),而X被成为子类(subclass)或者衍生类(derived class)。\begin{myremark}{}私有数据字段和私有方法只在类的内部使用。子类只能继承父类的非私有数据字段和非私有方法。\end{myremark}继承的语法如下:\begin{lstlisting}class SubClass(SuperClass):# data fields# instance methods\end{lstlisting}让我们看个例子:\begin{lstlisting}class Vehicle:def __init__(self, name, color):self.__name = name # __name是私有数据字段self.__color = colordef getColor(self):return self.__colordef setColor(self, color):self.__color = colordef getName(self):return self.__nameclass Car(Vehicle):def __init__(self, name, color, model):# 调用父类的构造方法super().__init__(name, color)self.__model = modeldef getDescription(self):return self.getName() + self.__model + " in " + self.getColor() + " color"c = Car("Ford Mustang", "red", "GT350")print(c.getDescription())print(c.getName())\end{lstlisting}上述代码中,我们创建了基类Vehicle和子类Car。在子类Car中,我们没有定义getName()方法,但我们仍然可以访问getName(),这是因为类Car继承自Vehicle类。在这段代码中,super()方法用来调用基类的方法。上述代码的运行结果如下:\begin{lstlisting}Ford MustangGT350 in red colorFord Mustang\end{lstlisting}\subsection{多重继承}不像Java和C\#语言,Python允许多重继承。即一次继承多个基类,比如:\begin{lstlisting}class Subclass(SuperClass1, SuperClass2, ...):# initializer# methods\end{lstlisting}看如下实例:\begin{lstlisting}class MySuperClass1():def method_super1(self):print("method_super1 method called")class MySuperClass2():def method_super2(self):print("method_super2 method called")class ChildClass(MySuperClass1, MySuperClass2):def child_method(self):print("child method")c = ChildClass()c.method_super1()c.method_super2()\end{lstlisting}输出结果为:\begin{lstlisting}method_super1 method calledmethod_super2 method called\end{lstlisting}因为子类ChildClass继承自MySuperClass1 , MySuperClass2,因此,ChildClass对象c可以访问method\_super1()方法和 method\_super2()方法。\subsection{重写方法}为重写基类的某个方法,子类需要定义一个同名的方法(即拥有相同名称和相同数量的参数)。例如:\begin{lstlisting}class A():def __init__(self):self.__x = 1def m1(self):print("m1 from A")class B(A):def __init__(self):self.__y = 1def m1(self):print("m1 from B")c = B()c.m1()\end{lstlisting}在这段代码中,我们重写了基类的m1()方法。输出结果为:\begin{lstlisting}m1 from B\end{lstlisting}\subsection{判断对象是否属于某类}isinstance() 方法用来检测指定对象是否是某个类的实例。例如:\begin{lstlisting}>>> isinstance(1, int)True>>> isinstance(1.2, int)False>>> isinstance([1,2,3,4], list)True\end{lstlisting}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。