__init_yu()缺少1个必需的位置参数(Python3)

2024-05-23 14:41:17 发布

您现在位置:Python中文网/ 问答频道 /正文

在我学习python的过程中,我在以下代码中遇到了一个错误:

class User:
    def __init__(self, first_name, last_name, location, payment_method):
        self.first_name = first_name
        self.last_name = last_name
        self.location = location
        self.payment_method = payment_method
        self.login_attempts = 0

    def increment_login_attempts(self):
        self.login_attempts += 1

    def reset_login_attempts(self):
        self.login_attempts = 0

    def printing_login_attempts(self):
        print('Quantity of login attempts: ' + str(self.login_attempts))

    def describe_user(self):
        print('Current user first name: ' + self.first_name.title())
        print('Current user last name: ' + self.last_name.title())
        print('Location is ' + self.location.title() + '. Payment method is ' + self.payment_method)

    def greet_user(self):
        print('Hello ' + self.first_name.title() + ' ' + self.last_name.title() + '!!!')


class Admin(User):
    def __init__(self, first_name, last_name, location, payment_method):
        super().__init__(first_name, last_name, location, payment_method)
        self.privilegis = Privilegis()


class Privilegis:
    def __init__(self, privilegis_type):
        self.privilegis_type = ['Allow to delete users', 'Allow to rename users', 'Allow to ban users']
    def show_privilegis(self):
        print('Special admins privilegis are: ' + ', '.join(self.privilegis))

new_user = Admin('John', 'Edwards', 'LA', 'visa')
new_user.privilegis.show_privilegis()

错误描述

^{pr2}$

我不明白问题出在哪里。我应该如何使用一个类(Privilegis)作为另一个(Admin)的属性?在


Tags: nameselftitleinitdefloginlocationpayment
2条回答

您的Admin类有一个privilegis属性,该属性初始化Privilegis的实例。__init__()方法定义了如何初始化类,在您的例子中,它需要一个privilegis_type作为参数。在

如果希望在实例化时将此特权传递给Admin,请将该参数添加到其__init__方法中,并在内部将其传递给privilege属性。在

class Admin(User):
    def __init__(self, first_name, last_name, location, payment_method, privilegis_type): # add privilegis type
        super().__init__(first_name, last_name, location, payment_method)
        self.privilegis = Privilegis(privilegis_type) # pass that privilegis type, needed by the Privilegis class


class Privilegis:
    def __init__(self, privilegis_type):
        self.privilegis_type = ['Allow to delete users', 'Allow to rename users', 'Allow to ban users']
    def show_privilegis(self):
        print('Special admins privilegis are: ' + ', '.join(self.privilegis_type)) # fixed that also

虽然在代码中有两个主要错误:

  • Privilegis类根本没有使用参数。您可以维护您的原始代码,删除使用一个合理的默认值,这取决于您要做什么。在
  • self.privilegis未在Privilegis内的任何地方定义。我相信你希望它是self.privilegis_type

这意味着拥有这样的东西:

^{pr2}$

在你的Privileges类中,你写下:

class Privileges:
    def __init__(self, privilegis_type):
        self.privilegis_type = ['Allow to delete users', 'Allow to rename users', 'Allow to ban users']
    # ...

因此,您指定它需要一个privilegis_type参数,但这很奇怪,因为稍后,您对此什么也不做。在

或者您应该重写构造函数,并处理参数(从而在构造Privilegis对象时提供一个构造函数),或者应该去掉该参数。在

相关问题 更多 >