我有点困惑。在两个不同的脚本中,我创建了一个比父类属性少的子类出于某种原因,在一种情况下,代码可以正常工作,而在另一种情况下,由于缺少位置参数,我经常会得到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/

10-12 02:06