Python 中的继承
原文:https://www.studytonight.com/python/inheritance-in-python
继承是面向对象编程最重要的方面之一。在编程时,很多时候会出现这样的情况:我们必须编写一些具有一些共同特性和一些独特的、特定于类的特性的类,这些特性包括变量和方法。
在这种情况下,按照面向对象编程,我们可以取出公共部分并将其放在一个单独的类中,并使所有其他类继承这个类,以使用它的方法和变量,从而减少一次又一次地重写每个类中的公共特性。
继承另一个类的类一般称为子类,而被其他类继承的类称为父类。
当然,您必须仅将此用于相关的类,例如,您可以定义一个类living organic,其中定义了一个生物的所有基本特征,如呼吸、进食等。现在这个类很容易被另一个类动物和人类重用,因为这两个类都有相同的特性。
此外,有时,继承用于通过将功能分解为核心特性和次要特性,将具有大量变量和方法的大类简化为更小的类。核心特性通常保存在父类中。
继承的语法
如果我们有一个类Parent和另一个类Child,并且我们希望类Child继承类Parent,那么
# Parent class
class Parent:
# class variable
a = 10;
b = 100;
# some class methods
def doThis();
def doThat();
# Child class inheriting Parent class
class Child(Parent):
# child class variable
x = 1000;
y = -1;
# some child class method
def doWhat();
def doNotDoThat();
通过在括号中指定另一个类的名称,在声明一个类时,我们可以指定继承。在上例中,Parent的所有属性都将继承给Child类。这样,类Parent中定义的所有方法和变量也成为了Child类的一部分。
举个例子
举个简单的例子。动物可以分为多种类型,如爬行动物、哺乳动物、两栖动物等。虽然它们在生理和生物学上都有所不同,但它们之间有许多共同的特征。所以现在我们定义一个名为 Animal 的父类,它会有一些与动物相关的基本属性和功能。
然后我们将为各种其他类型定义类,所有这些类也将继承类 Animal 。
这里有Animal课。
class Animal:
# properties
multicellular = True
# Eukaryotic means Cells with Nucleus
eukaryotic = True
# functions
def breath();
def feed();
现在让我们为哺乳动物定义一个类。由于哺乳动物是温血动物,为婴儿产奶等,因此我们的Mammal类看起来像,
class Mammal(Animal):
# properties
haveMammaryGland = True;
def warmBlood = True;
# functions
def produceMilk();
如果我们也想为Amphibians创建另一个类,那么
class Amphibian(Animal):
# properties
liveInWater = True;
# functions
def metamorphosis();
由于类Mammals和Amphibian都继承了类Animal,因此它们将具有类Animal中定义的属性和函数。
因此,现在任何Amphibian类的物体,比如青蛙,都将具有属性:multicellular(来自动物类)、eukaryotic(来自动物类)、liveInWater(来自两栖类),并且能够breath()、feed()和做metamorphosis()。
而这一切又如何能写成代码,如果我们创建一个对象,比如青蛙:
>>> Amphibian Frog = Amphibian()
>>> Frog.breath(); # calling function defined in Animal class
>>> Frog.metamorphosis(); # calling function defined in Amphibian class
>>> print (Frog.liveInWater)
真实的
使用继承的好处
以下是在程序中使用继承的几个主要优点。
- 减少代码重复,因为常见的代码可以放在父类中,因此所有子类都可以使用它。
- 结构化代码:通过将代码划分为类,我们可以通过将功能划分为类来更好地构建我们的软件。
- 使代码更具可伸缩性。
访问子类中的父类元素
在子类中工作时,在某些时候,您可能必须使用父类的属性或函数。为了访问父类的元素,可以使用点.操作符。
Parent.variableName
上面提到了如何访问变量,或者如果需要调用父类的函数,
Parent.functionName()
其中Parent是我们父类的名字,variableName和functionName()分别是它的变量和函数。
下面是一个例子,我们有一个简单的例子来说明这一点:
class Parent:
var1 = 1
def func1(self):
# do something here
class Child(Parent):
var2 = 2
def func2(self):
# do something here too
# time to use var1 from 'Parent'
myVar = Parent.var1 + 10
return myVar