super().__init__报错TypeError: __init__() takes 3 positional arguments but 4 were given

代码详情:

class  Man():       
    '''一个人'''
    def __init__(self,name,age,like):  
        '''初始化属性'''
        self.name = name         
        self.age = age          
        self.like = like
	-- snip --

class Woman(Man):
    '''继承一个人的类'''
    def __init__(self,name,age,like):          
        '''初始化父类的属性'''
        super().__init__(self,name,age,like)   
	-- snip --

报以下错误:

File "I:/test/8-类.py", line 65, in __init__
    super().__init__(self,name,age,like)        
TypeError: __init__() takes 3 positional arguments but 4 were given

问题是父类可接受的属性变量有3个,但是提供了4个;

修改:

        super().__init__(name,age,like)   #去掉self

init的作用

–super(),会得到一个特殊的对象,该对象就是专门用来
访问父类中的属性的(严格按照继承的关系)
–super().__ init__(),
这里 __ init__()括号中不需要传参self(self参数已在super()中传入,在__init__中将隐式传递,不需要写出), 有其他参数传其他参数即可
–在Python2中,super()的完整用法是 super(自己的类,self).__ init__(),
在Python2中需要写完整,而Python3中可以简写为 super().__ init__()。
–用法解析:
在子类的__init__方法中使用 super().__ init__() , 就相当于把父类的__init__构造方法拿过来用, 并且可以对父类的__init__方法进行补充(比如添加成员属性/方法) ,
也就相当于把父类的__init__方法继承过来了, 之后用子类实例化一个对象后, 这个对象可以点出父类对象的成员属性/方法, 当然也可以点出自己类对象的成员属性/方法
原本的子类中的__init__方法会覆盖掉父类的__init__方法, 导致无法通过实例化子类的类对象去给父类的类对象添加成员属性/方法,也无法调用父类类对象的属性/方法。

你可能感兴趣的:(python,http,loadrunner,服务器)