首页 > 其他 > 详细

继承:不同的参数集合

时间:2020-03-13 22:14:50      阅读:69      评论:0      收藏:0      [点我收藏+]

在项目中,我们常常会遇到最初设计的参数字段不够,导致我要修改很多代码,对于这种额外参数的情况我们改如何去处理呢?代码如下

class Contact: # 这个类里面定义了name和email两个属性
    def __init__(self, name, email):
        self.name = name
        self.email = email


class AddressHolder:
    def __init__(self, street, city, state, code): # 这个类里面定义了 streer,city,state,code属性
        self.street = street
        self.city = city
        self.state = state
        self.code = code


class Fried(Contact, AddressHolder): # 现在需求又需要再这上面加一个电话号码,一次还好,如果此类问题经常发生,这就变成很头疼的问题,那么我们该如何来规避这样的问题呢?
    def __init__(self, name, email, street, city, state, code, phone):
        Contact.__init__(self, name, email)
        AddressHolder.__init__(self, street, city, state, code)
        self.phone = phone

方法1:一开始就定义好字段,不再修改,这显然不现实
方法2:使用不定长参数来收集这些参数(可行)

解决方案如下:

class Contact:
    all_contacts = ContactList()

    def __init__(self, name="", email="", **kwargs): # 必须要写成这种键值对的方式,因为使用的kwargs
        super().__init__(**kwargs)
        self.name = name
        self.email = email
        Contact.all_contacts.append(self)

class AddressHolder:
    def __init__(self, street="", city="", state="", code="", **kwargs): # 也可采用args元组类型的不定长参数来收集,思路一样的
        super().__init__(**kwargs)
        self.street = street
        self.city = city
        self.state = state
        self.code = code

class Fried(Contact, AddressHolder):
    def __init__(self, phone="", **kwargs):
        super().__init__(**kwargs) # 在这里我们就不用管前面的参数了,只需要继承过来就行,前面的参数都被kwargs收集起来了,维护起来更加方便
        self.phone = phone

 

继承:不同的参数集合

原文:https://www.cnblogs.com/su-sir/p/12489309.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!