Python 继承

原文:https://www.javatpoint.com/inheritance-in-python

继承是面向对象范例的一个重要方面。继承为程序提供了代码可重用性,因为我们可以使用现有的类来创建新的类,而不是从头开始创建。

在继承中,子类获取属性,并且可以访问父类中定义的所有数据成员和函数。子类也可以向父类的函数提供其特定的实现。在教程的这一部分,我们将详细讨论继承。

在 python 中,派生类只需在派生类名称后面的括号中提到基类,就可以继承基类。考虑以下语法将基类继承到派生类中。

句法


class derived-class(base class):
<class-suite>

一个类可以通过在括号内提及所有类来继承多个类。请考虑以下语法。

句法


class derive-class(<base class 1>, <base class 2>, ..... <base class n>):
<class - suite>

例 1


class Animal:
def speak(self):
print("Animal Speaking")
#child class Dog inherits the base class Animal
class Dog(Animal):
def bark(self):
print("dog barking")
d = Dog()
d.bark()
d.speak()

输出:

dog barking
Animal Speaking


Python 多级继承

像其他面向对象语言一样,python 中的多级继承是可能的。当一个派生类继承另一个派生类时,多级继承被存档。在 python 中,多级继承的存档级别不限。

下面给出了多级继承的语法。

句法


class class1:
<class-suite>
class class2(class1):
<class suite>
class class3(class2):
<class suite>
.
.

例子


class Animal:
def speak(self):
print("Animal Speaking")
#The child class Dog inherits the base class Animal
class Dog(Animal):
def bark(self):
print("dog barking")
#The child class Dogchild inherits another child class Dog
class DogChild(Dog):
def eat(self):
print("Eating bread...")
d = DogChild()
d.bark()
d.speak()
d.eat()

输出:

dog barking
Animal Speaking
Eating bread...


Python 多重继承

Python 为我们提供了在子类中继承多个基类的灵活性。

下面给出了执行多重继承的语法。

句法


class Base1:
<class-suite>

class Base2:
<class-suite>
.
.
.
class BaseN:
<class-suite>

class Derived(Base1, Base2, ...... BaseN):
<class-suite>

例子


class Calculation1:
def Summation(self,a,b):
return a+b;
class Calculation2:
def Multiplication(self,a,b):
return a*b;
class Derived(Calculation1,Calculation2):
def Divide(self,a,b):
return a/b;
d = Derived()
print(d.Summation(10,20))
print(d.Multiplication(10,20))
print(d.Divide(10,20))

输出:

30
200
0.5


issubclass(sub,sup)方法

issubclass(sub,sup)方法用于检查指定类之间的关系。如果第一个类是第二个类的子类,则返回 true,否则返回 false。

考虑下面的例子。

例子


class Calculation1:
def Summation(self,a,b):
return a+b;
class Calculation2:
def Multiplication(self,a,b):
return a*b;
class Derived(Calculation1,Calculation2):
def Divide(self,a,b):
return a/b;
d = Derived()
print(issubclass(Derived,Calculation2))
print(issubclass(Calculation1,Calculation2))

输出:

True
False


isinstance (obj,class)方法

isinstance()方法用于检查对象和类之间的关系。如果第一个参数(即 obj)是第二个参数(即类)的实例,则返回 true。

考虑下面的例子。

例子


class Calculation1:
def Summation(self,a,b):
return a+b;
class Calculation2:
def Multiplication(self,a,b):
return a*b;
class Derived(Calculation1,Calculation2):
def Divide(self,a,b):
return a/b;
d = Derived()
print(isinstance(d,Derived))

输出:

True


方法重写

我们可以在子类中提供父类方法的一些具体实现。当父类方法在子类中用一些特定的实现来定义时,这个概念被称为方法重写。在子类中需要父类方法的不同定义的情况下,我们可能需要执行方法重写。

考虑下面的例子,在 python 中执行方法重写。

例子


class Animal:
def speak(self):
print("speaking")
class Dog(Animal):
def speak(self):
print("Barking")
d = Dog()
d.speak()

输出:

Barking

方法重写的真实例子


class Bank:
def getroi(self):
return 10;
class SBI(Bank):
def getroi(self):
return 7;

class ICICI(Bank):
def getroi(self):
return 8;
b1 = Bank()
b2 = SBI()
b3 = ICICI()
print("Bank Rate of interest:",b1.getroi());
print("SBI Rate of interest:",b2.getroi());
print("ICICI Rate of interest:",b3.getroi());

输出:

Bank Rate of interest: 10
SBI Rate of interest: 7
ICICI Rate of interest: 8


python 中的数据抽象

抽象是面向对象编程的一个重要方面。在 python 中,我们还可以通过向要隐藏的属性添加双下划线(___)作为前缀来执行数据隐藏。此后,通过对象,该属性在类外部将不可见。

考虑下面的例子。

例子


class Employee:
__count = 0;
def __init__(self):
Employee.__count = Employee.__count+1
def display(self):
print("The number of employees",Employee.__count)
emp = Employee()
emp2 = Employee()
try:
print(emp.__count)
finally:
emp.display()

输出:

The number of employees 2
AttributeError: 'Employee' object has no attribute '__count'