Python说文解字_继承过程中的参数集合

1. 先看一段属性继承的代码:

class User:
    def __init__(self,name,age):
        self.name = name
        self.age = age

class User1(User):
    def __init__(self,name,age,height,weight):
        self.height = height
        self.weight = weight
        # 此处像继承父类的name 和 age
        super().__init__(name, age)



user1 = User1('thomas',38,180,80)

print(user1.height)
print(user1.weight)
print(user1.name)
print(user1.age)

# 180
# 80
# thomas
# 38

  说明1:当然这么写一点儿毛病都没有,但是有一个问题是,我们在子类继承的时候还需要在写明父类当中的具有的属性name和age嘛?这样写有点儿麻烦。

  说明2:我们如果有N个父类的参数,每次要继承父类参数的时候不带累死了,如果父类参数当中还有字典,字符串等等。如何处理?

  说明3:其实这里我们就用到了*args,**kwargs可变长参数的妙用了。我们定义父类有N个不同类型的参数,再来看一下,可以如何简单的应用。

 

  更改代码2

class User:
    def __init__(self,name,age,address = 'Qingdao',dicts = {'key':'value'}):
        self.name = name
        self.age = age
        self.address = address
        self.dicts = dicts


class User1(User):
    def __init__(self,height,weight,*args,**kwargs):
        super().__init__(*args,**kwargs)
        self.height = height
        self.weight = weight

user1 = User1(180,80,'thomas',38)

print(user1.height)
print(user1.weight)
print(user1.name)
print(user1.age)
print(user1.address)
print(user1.dicts)

# 180
# 80
# thomas
# 38
# Qingdao
# {'key': 'value'}

  说明1:很牛X吧?其实我们不用具体的说明父类有哪些属性参数值,用不定长参数就搞定了,这样简写了很多代码量:记住:super().__init__(*args,**kwargs)

  说明2:但是注意一点。*args和**kwargs要写到最后。而且在子类的构造函数上也要写上这两个东西。

 

 

posted @ 2019-06-01 03:58  时海涛|Thomas  阅读(736)  评论(0编辑  收藏  举报