📜  在Python中调用超类构造函数

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

在Python中调用超类构造函数

就像为一个对象创建一个蓝图。如果我们想建造一座建筑物,那么我们必须有蓝图,比如有多少房间,它的尺寸等等,所以这里实际的建筑物是一个对象,而建筑物的蓝图是一个类。

  • 类是用户定义的数据类型,它具有数据成员和成员函数。
  • 数据成员是数据变量,成员函数是用于操作这些变量的函数,这些数据成员和成员函数一起定义了类中对象的属性和行为。

在Python中使用关键字class后跟类名来定义一个类。

类和对象结构

在Python中声明对象:定义类时,只定义对象的规范;没有分配内存或存储空间。要使用类中定义的数据和访问功能,我们需要创建对象。

句法 :

object = ClassName()

访问数据成员和成员函数:它们可以通过点(“.”)运算符及其各自类的对象进行访问。例如,如果对象是汽车并且我们想要访问名为 drive 的函数,那么我们将不得不编写car.drive()

遗产

继承允许我们定义一个从另一个类继承所有方法和属性的类。被继承的类称为基类父类。继承另一个类的类称为子类派生类。

例子 :

人类(父类)

教师班(儿童班)

在这里,我们可以同时看到 person 和 teacher 类,因为我们继承了 teacher 中的 person 类,所以我们有许多共同的特征,比如每个人都有名字、性别、canTalk(在大多数情况下)、canWalk(在大多数情况下)等等,所以在教师类中,我们不需要再次实现那个东西,因为它是由教师类继承的,所以教师必须具备的任何特性,所以我们可以添加更多特性,比如 canTeach() 和教师编号和许多其他。

所以基本思想是,如果任何类继承了其他类,那么它必须具有父类的特性(如果要使用,你可以使用它),我们可以在它们上添加更多特性。

构造函数

构造函数通常用于实例化对象。构造函数的任务是在创建类的对象时对类的数据成员进行初始化(赋值)。在Python中, __init__()方法称为构造函数,并且总是在创建对象时调用。

句法 :

def __init__(self):
   # body of the constructor

极好的

Python有 super函数,它允许我们访问超类的临时对象。

使用超类:

  • 我们不需要显式使用基类名称。
  • 有助于处理多重继承。

具有单一继承的超级:

例子 :

# this is the class which will become
# the super class of "Subclass" class
class Class():
    def __init__(self, x):
        print(x)
  
# this is the subclass of class "Class"
class SubClass(Class):
    def __init__(self, x):
  
        # this is how we call super
        # class's constructor
        super().__init__(x)
  
# driver code
x = [1, 2, 3, 4, 5]
a = SubClass(x)

输出 :

[1, 2, 3, 4, 5]

具有多重继承的超级:
示例:使用 super函数在Python中实现以下继承结构:

继承结构

# defining class A
class A:
  def __init__(self, txt):
    print(txt, 'I am in A Class')
  
# B class inheriting A
class B(A):
  def __init__(self, txt):
    print(txt, 'I am in B class')
    super().__init__(txt)
      
# C class inheriting B
class C(B):
  def __init__(self, txt):
    print(txt, 'I am in C class')
    super().__init__(txt)
  
# D class inheriting B
class D(B):
  def __init__(self, txt):
    print(txt, 'I am in D class')
    super().__init__(txt)
  
# E class inheriting both D and C
class E(D, C):
  def __init__(self):
    print( 'I am in E class')
    super().__init__('hello ')
  
# driver code
d = E()
print('')
h = C('hi')

输出 :

I am in E class
hello  I am in D class
hello  I am in C class
hello  I am in B class
hello  I am in A Class

hi I am in C class
hi I am in B class
hi I am in A Class