我有点困惑。在两个不同的脚本中,我创建了一个比父类属性少的子类出于某种原因,在一种情况下,代码可以正常工作,而在另一种情况下,由于缺少位置参数,我经常会得到typeerrors。
本规范无任何问题:
class Restaurant:
def __init__(self, restaurant_name, cuisine_type):
self.name = restaurant_name
self.cuisine = cuisine_type
self.number_served = 0
--SNIP--
class IceCreamStand(Restaurant):
def __init__(self, restaurant_name):
super().__init__(self,restaurant_name)
self.name = restaurant_name
但这一点,在我看来是一样的,对于行中的一些人来说总是失败,他们说init缺少另外两个位置参数。
class User:
def __init__(self, first_name, last_name, location, occupation):
self.name = first_name
self.surname = last_name
self.location = location
self.job = occupation
self.login_attempts = 0
--SNIP--
class Privileges(User):
def __init__(self, first_name):
super().__init__(self, first_name)
self.name = first_name
self.privileges_admin = ('can add posts'
, "can edit other users' posts", 'can delete posts',
'can modify posts', 'can ban users')
self.privileges_user = ('can add posts', 'can edit own posts')
有人能解释一下为什么会这样吗?
最佳答案
当您使用super().func()时
在我看来,这意味着你要调用父方法。
意思是你应该在父方法中传递相同的参数。
class User:
def __init__(self, first_name, last_name, location, occupation):
这样地:
class Privileges(User):
def __init__(self, first_name):
super().__init__(first_name, 'default', 'default', 'default')
或:
class Privileges(User):
def __init__(self, first_name, last_name, location, occupation):
super().__init__(first_name, last_name, location, occupation)
我英语不太好。希望能有帮助
关于python - Python子类的属性少于父类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57838823/