Python关于继承以及构造方法上的问题

Python关于继承以及构造方法上的问题。

最近在研究关于torch中的卷积神经网络结构代码。发现建立卷积神经网络的一些基本的模块调用过程中还有些不明白的地方。在查看了相关资料后明白了其中的原理。
因此写下一篇博客记录自己的收获。

首先我们都知道类的继承格式如下

class Father:
	a="这是父类"

class Son(Father):
	pass

s=Son() #实例化子类
print(s.a)

仅仅需要声明就可以了。声明后在实例化子类后,子类也具有和父类相同的属性

但是在构造函数的定义上却有些研究。
我们都知道,子类继承父类的时候,如果父类自定义了构造函数,那么子类也会相应的继承其构造函数。当然,如果想自定义构造函数的时候,我们只需要在子类中定义构造函数就可以覆盖父类的构造函数了。

但是有时候我们不想单纯的覆盖父类的构造函数,而是想在其原有的功能上增加一些新的功能,那么这个时候就要引出“重构”的概念了。

下面就是使用重构和不使用重构的代码对比

以下是不使用重构方法

#不使用重构的方法,需要重新编写first_name和last_name这两个参数,很麻烦
class Father:
    def __init__(self,first_name,last_name):
        self.first_name=first_name
        self.last_name=last_name

class Son(Father):
    def __init__(self,first_name,last_name, age):
        self.first_name=first_name
        self.last_name=last_name
        self.age=age

以下是使用重构方法

#使用重构的方法,可以看到使用super后可以省略first_name和last_name这两个变量的定义过程
class Father:
    def __init__(self,first_name,last_name):
        self.first_name=first_name
        self.last_name=last_name

class Son(Father):
    def __init__(self,first_name,last_name, age): 
        super(Son,self).__init__(first_name,last_name)
        self.age=age

当然,也可以使用非super的方法重构

class Father:
    def __init__(self,first_name,last_name):
        self.first_name=first_name
        self.last_name=last_name

class Son(Father):
    def __init__(self,first_name,last_name, age): 
        Father.__init__(self,first_name,last_name)
        self.age=age

当然,Python 3中的super()函数已经默认获取了当前类(即self)和当前方法的信息,因此直接使用如下格式也是可行的(更加常见的)

class Father:
    def __init__(self,first_name,last_name):
        self.first_name=first_name
        self.last_name=last_name

class Son(Father):
    def __init__(self,first_name,last_name, age):
        super().__init__(first_name,last_name)
        self.age=age

总结:可以看到使用重构方法在类的构造上更加的方便,在类属性比较多的时候有优势。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值