zoukankan      html  css  js  c++  java
  • 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要写到最后。而且在子类的构造函数上也要写上这两个东西。

     
  • 相关阅读:
    《Java入门第三季》第一章 异常与异常处理
    c++第三十一天
    《Java入门第二季》第五章 阶段练习
    《Java入门第二季》第四章 多态
    《Java入门第二季》第三章 继承
    WinForm 使用皮肤,且单击按更换皮肤。
    ExecuteReader: CommandText 属性尚未初始化
    用户登录模块--代码
    abstract 关键字-- 抽象
    Winform TabControl控件使用
  • 原文地址:https://www.cnblogs.com/noah0532/p/10958291.html
Copyright © 2011-2022 走看看