我遇到以下代码的问题:
class User:
def __init__(self, first_name, last_name, **profile):
self.profile = profile
self.first_name = first_name
self.last_name = last_name`
self.profile['first_name'] = first_name
self.profile['last_name'] = last_name
def query(self, key):
value = self.profile[key]
print('Here is the result:' + '\n\t' + str(value))
class UserVip(User):
def __init__(self, first_name, last_name, **profile):
super().__init__(self, first_name, last_name, **profile)
ron_weasley = UserVip('ron', 'weasley',
age=17,`enter code here
school='hogwarts'
)
当我运行它时,我收到了此错误消息
TypeError: __init__() takes 3 positional arguments but 4 were given
但是' **个人资料可以收到任何数量的论点,可以吗?然后我检查了论点,并尝试了这样
ron_weasley = UserVip('ron', 'weasley',
school='hogwarts'
)
它出了问题。我还尝试了其他一些方法,并在网上搜索了很长时间。但没用。我是否误解了 init (),继承或' **(dict)'?请帮助或尝试提供一些如何解决此问题的建议。提前谢谢。
答案 0 :(得分:2)
您不必在调用父self
__init__
参数
应该是:
super().__init__(first_name, last_name, **profile)
答案 1 :(得分:1)
我认为您不应该在self
中使用super().__init__(self, first_name, last_name, **profile)
。
这是一个有效的代码:
class User:
def __init__(self, first_name, last_name, **profile):
self.profile = profile
self.first_name = first_name
self.last_name = last_name
self.profile['first_name'] = first_name
self.profile['last_name'] = last_name
def query(self, key):
value = self.profile[key]
print('Here is the result:' + '\n\t' + str(value))
class UserVip(User):
def __init__(self, first_name, last_name, **profile):
super().__init__(first_name, last_name, **profile)
ron_weasley = UserVip('ron', 'weasley', age=17, school='hogwarts')
ron_weasley.query('age')
答案 2 :(得分:-1)
首先,对于UserVip类的__init__
,缩进是错误的。
其次,对于UserVip的超类构造函数,您应该使用User
而不是super()
。或者您可以从参数中删除self
以下代码适用于我。
class User:
def __init__(self, first_name, last_name, **profile):
self.profile = profile
self.first_name = first_name
self.last_name = last_name
self.profile['first_name'] = first_name
self.profile['last_name'] = last_name
def query(self, key):
value = self.profile[key]
print('Here is the result:' + '\n\t' + str(value))
class UserVip(User):
def __init__(self, first_name, last_name, **profile):
User.__init__(self, first_name, last_name, **profile)
ron_weasley = UserVip('ron', 'weasley', age=17,school='hogwarts')
答案 3 :(得分:-2)
您可以在代码中super
代替classname
。
例如,使用下面的代码
调用父类__init__
User.__init__(self, first_name, last_name, **profile)
希望它能解决你的问题。 !