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