📜  Python中的继承 |设置 2

📅  最后修改于: 2022-05-13 01:55:21.175000             🧑  作者: Mango

Python中的继承 |设置 2

先决条件: Python中的继承基础,继承,对象示例,issubclass和super

Python中有2个与继承相关的内置函数。他们是:

1. isinstance():检查对象的类型。它的语法是:
isinstance(object_name, class_name)
如果 object_name 的类是 class_name else False ,它将返回True
例如:

# Python code to demonstrate issubclass()
  
print(isinstance(5, int))
输出:
True

上面的代码将显示以下输出:
真的
这是因为 5 是整数,因此属于 int 类。
注意: 'int' 在Python中既是类型又是类。

2. issubclass():检查一个特定的类是否是另一个类的子类。它的语法是:
issubclass(childclass_name, parentclass_name)
如果输入的子类实际上是从输入的父类派生的,它将返回True ,否则返回False
例如:

# Python code to demonstrate issubclass()
class A():
      def __init__(self, a):
            self.a = a
class B(A):
      def __init__(self, a, b):
            self.b = b
            A.__init__(self, a)
  
print(issubclass(B, A))
输出:
True

上面的代码将显示以下输出:
真的

多重继承:
当一个类从多个父类继承时,称为多重继承。它的工作方式与单继承相同。

# Python code to demonstrate multiple inheritance
  
# first parent class
class Person(object):                  
      def __init__(self, name, idnumber):
            self.name = name
            self.idnumber = idnumber
  
# second parent class      
class Employee(object):                
      def __init__(self, salary, post):
            self.salary = salary
            self.post = post
  
# inheritance from both the parent classes      
class Leader(Person, Employee):        
      def __init__(self, name, idnumber, salary, post, points):
            self.points = points
            Person.__init__(self, name, idnumber)
            Employee.__init__(self, salary, post)   
输出:

在创建类的实例时,请确保将参数提供给函数的顺序与类块中的顺序相关。例如,在上面的代码中,如果我们必须生成一个实例,我们会写

ins = Leader('Rahul', 882016, 75000, 'Assistant Manager', 560)

如果将 75000 和 'Assistant Manager' 的序列位置互换,则代码将 'Assistant Manager' 作为薪水,将 75000 作为职位。
你自己看。

# first parent class
class Person(object):                 
      def __init__(self, name, idnumber):
            self.name = name
            self.idnumber = idnumber
  
# second parent class      
class Employee(object):                
      def __init__(self, salary, post):
            self.salary = salary
            self.post = post
  
# inheritance from both the parent classes      
class Leader(Person, Employee):        
      def __init__(self, name, idnumber, salary, post, points):
            self.points = points
            Person.__init__(self, name, idnumber)
            Employee.__init__(self, salary, post)
            print(self.salary)
        
ins = Leader('Rahul', 882016, 'Assistant Manager', 75000, 560)
输出:
Assistant Manager

覆盖方法:
覆盖一个方法意味着在子类中重新定义一个已经在其他类中定义的方法。
只有当超类中存在另一个具有相同名称和相同参数集的方法时,子类中的方法才会被称为重写。
此外,我们不能覆盖超类的私有方法,即名称前有双下划线的方法。
例如:

# Base Class
class A(object):                
        def __init__(self):
                constant1 = 1
        def method1(self):
                print('method1 of class A')
  
class B(A):
        def __init__(self):
                constant2 = 2
                self.calling1()
                A. __init__(self)
        def method1(self):
                print('method1 of class B')
        def calling1(self):
                self.method1()
                A.method1(self)
b = B()
输出:
method1 of class B
method1 of class A

代码调用类 B 的方法 1 而不是 A,因为Python按从下到上的顺序搜索函数。
如果要调用A类的method1,将self.method1()替换为A.method1(self)。
上述重写方法的过程适用于旧式类,即父类不从“对象”类继承的类。
对于新式类,其父类继承自内置的“对象”类,还有另一个用于覆盖方法的过程。
super() 方法帮助我们覆盖新样式类中的方法。它的语法如下:
super(class_name, instance_)of_class).overridden_method_name()
让我们假设有 3 个类 A、B 和 C。所有 3 个类都有一个名为“method1”的公共函数。 super() 的工作来了。

class A(object):
        def function1(self):
                print 'function of class A'
class B(A):
        def function1(self):
                print 'function of class B'
                super(B, self).function1()
class C(B):
        def function1(self):
                print 'function of class C'
                super(C, self).function1()
j = C()
j.function1()
输出:
function of class C
function of class B
function of class A

超级函数中的'self'参数充当父类的对象,因此调用父类的function1。