|
发表于 2020-6-24 20:44:12
From FishC Mobile
|
显示全部楼层
|阅读模式
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
网上找的示例:
class Person:
def __init__(self,name,age):
self.name = name
self.__age = age
def __test(self):
print("这是父类的私有方法")
def test(self):
self.__test()
print("这是父类的公有方法")
def setAge(self,age):
self.__age = age
def getAge(self):
return self.__age
class Student(Person):
def __init__(self,school,name,age):
super(Student, self).__init__(name=name,age=age)
self.school = school
def stuTest(self):
super().test()
print("所在学校为:",self.school)
stu = Student("一中","tom",12)
stu.stuTest()
print("学生的姓名是:",stu.name)
print("学生的年龄是:",stu.getAge())
=================================
运行正常,为什么我按一模一样的语法改成我的实例就会报错TypeError: object.__init__() takes exactly one argument (the instance to initialize)?
=================================
class M():
def __init__(self,a,b):
self.a=a
self.b=b
class X(M):
def __init__(self,a,b,c):
super(M, self).__init__(a=a,b=b)
self.c=c
d=X(1,1,1)
print(d.b)
本帖最后由 Twilight6 于 2020-6-24 21:00 编辑
super(M, self).__init__(a=a,b=b)
报错的原因是这条语句,你 super 填入 M 时候就表示调用的是 M 的父类 ,而你定义的 M类 没有设置继承哪个类,所以默认继承object 类
而 object 类的 __init__ 方法是没有设置传入参数的 而你用 super 调用父类方法时候传入了 a、b 两个参数导致报错
改成这样即可:class M():
def __init__(self,a,b):
self.a=a
self.b=b
class X(M):
def __init__(self,a,b,c):
super(X,self).__init__(a=a,b=b) # 相当于 super().__init__(a=a,b=b)
self.c=c
d=X(1,1,1)
print(d.b)
你也可以这样写个类,这样 super(M,self).__init__(a=a,b=b) 这里就不会报错了,因为此时 M 的父类 T 的 __init__ 方法设置了两个参数
此时你 用 super 调用父类就不会报错了~ super里面填入的类,代表的调用该类的父类方法~class T:
def __init__(self,a,b):
self.a = a
self.b = b
print('调用 T 的__init__方法')
class M(T):
def __init__(self,a,b):
print('调用 M 的__init__方法')
class X(M):
def __init__(self,a,b,c):
super(M,self).__init__(a=a,b=b)
self.c=c
d=X(1,1,1)
print(d.b)
|
|