python 重写构造方法 super()

python关于super()含参数的初始化构造方法

@(python构造方法)[super|init]


构造方法

Python 的构造方法是和 java 的构造函数很类似,在子类继承父类的时候,子类如果也有一个构造函数,需要用super()函数来调用父类的构造方法,确保正确的初始化。Python也提供的是super()函数来绑定父类的构造方法,除了super()函数,python还有一种调用超类构造方法的未绑定版本

这里也踩了坑,因为就是网上很多介绍的都是父类没有初始化参数。这里主要介绍父类初始化含有参数的问题。

调用超类构造方法的未绑定方法

#用super()方法的时候父类一定要记得继承object,这个一定要写,否#则会出错。
class People():
    def __init__(self, name, age,gender):
        self.name = name
        self.age = age
        self.gender=gender
    def walk(self):
        print('%s is walking' % self.name)
    def test(self):
        print('test class from father class %s' %self.name)


#定义Teacher子类
class Teacher(People):
    school = 'jialidun'
    def __init__(self, name, age, gender, level, salary):
        #原始的方法,推荐super()方法来写。
        People.__init__(self,name,age,gender)
        self.level = level
        self.salary = salary
    def teach(self):
        print('%s is teaching' %self.name)
    def test(self):   
        People.test(self)
        print('from teacher')

# 测试部分
t = Teacher("bruce",23,"male","teacher",30000)
t.walk()
t.teach()
t.test()

super()函数绑定父类

#父类一定要写继承(object),否则会报错。
class People(object):
    def __init__(self, name, age,gender):
        self.name = name
        self.age = age
        self.gender=gender
    def walk(self):
        print('%s is walking' % self.name)
    def test(self):
        print('test class from father class %s' %self.name)


#定义Teacher子类
class Teacher(People):
    school = 'jialidun'
    def __init__(self, name, age, gender, level, salary):
        #super写和父类相同的属性。   
        super(Teacher, self).__init__(name,age,gender)        
        self.level = level
        self.salary = salary
    def teach(self):
        print('%s is teaching' %self.name)
    def test(self):   
        People.test(self)
        print('from teacher')




# 测试部分
t = Teacher("bruce",23,"male","teacher",30000)
t.walk()
t.teach()
t.test()

不含参数的构造方法简单,这里不做介绍,主要是用super方法的时候有几个点需要注意,一是父类必须继承object二是子类构造方法super参数要和父类的一样

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,构造器是一种特殊的方法(函数),通常称为 `__init__` 方法构造器用于在对象创建时初始化对象的属性。在Python中,构造器可以被重写,即在子类中重新定义一个与父类相同名称的构造方法,从而覆盖父类的构造器。 当一个类的子类重新定义了构造方法时,Python会首先调用子类的构造方法,然后再调用父类的构造方法。这样可以保证子类对象的初始化按照正确的顺序进行。 以下是一个示例,演示了如何在子类中重写父类的构造方法: ```python class Animal: def __init__(self, name): self.name = name print("Animal constructor called") class Dog(Animal): def __init__(self, name, breed): self.breed = breed super().__init__(name) print("Dog constructor called") my_dog = Dog("Buddy", "Labrador") ``` 在上面的示例中,我们定义了一个 `Animal` 类和一个 `Dog` 类,其中 `Dog` 类继承自 `Animal` 类。`Animal` 类的构造方法接受一个参数 `name`,用于初始化动物的名称。`Dog` 类的构造方法接受两个参数 `name` 和 `breed`,用于初始化狗的名称和品种。在 `Dog` 类的构造方法中,我们首先调用父类的构造方法,即 `super().__init__(name)`,然后初始化狗的品种属性。 当我们创建一个 `Dog` 对象时,Python会首先调用子类的构造方法 `__init__`,然后再调用父类的构造方法 `__init__`。因此,上面的代码会依次输出以下内容: ``` Animal constructor called Dog constructor called ``` 总之,Python中的构造方法可以被重写,子类可以在构造方法中调用父类的构造方法,以初始化继承自父类的属性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值