__init__( ) 缺少 1 个要求位置参数
__init__( ) missing 1 requirement positional argument
我想问一个与Python'class'相关的问题,因为我在这个网站上练习练习9.8时卡在了这个例子上:
https://ehmatthes.github.io/pcc_2e/solutions/chapter_9/#9-9-battery-upgrade
示例:写一个单独的权限class。 class 应该有一个属性 privileges,它存储一个字符串列表,如练习 9-7 中所述。将 show_privileges() 方法移动到此 class。在 Admin class 中创建一个 Privileges 实例作为属性。创建一个新的 Admin 实例并使用您的方法显示其权限。
#Seperate Privileges Class from Admin Class
#This is parent class
class User:
def __init__(person, first_name, last_name, age, location, mail):
person.first_name = first_name
person.last_name = last_name
person.age = age
person.location = location
person.mail = mail
person.login_attempts = 0
def describe_user(person):
print(f"User full name: {person.first_name} {person.last_name}")
print(f"User age: {person.age}")
print(f"User location: {person.location}")
print(f"User mail: {person.mail}")
def greet_user(person):
print(f"Hello {person.first_name} {person.last_name}!")
def increment_login_attempts(person):
person.login_attempts += 1
def reset_login_attempts(person):
person.login_attempts = 0
#This is child class Admin
class Admin(User):
def __init__(self, first_name, last_name, age, location, mail):
super().__init__(first_name, last_name, age, location, mail)
'''Initialize an empty set of privileges'''
self.privileges = Privileges()
#Seperate Privileges class:
class Privileges:
def __init__(self, privilege): (1)
self.privileges = [] (2)
def show_privileges(self):
print("\nAdministrator's privileges are:")
for privilege in self.privileges:
print(f"- {privilege}")
Tom = Admin('Tom', 'Felton', 23, "the UK", 'tomfelton@hotmail.com')
Tom.describe_user()
Tom.privileges.privileges = ["can add post", "can delete post", "can ban user", "can do bla bla"]
Tom.privileges.show_privileges()
执行完上面的全部代码后,我得到了这个错误:
我已经检查了上面同一站点的答案,但是我很难理解为什么我要把我的代码的第 (1) 行和第 (2) 行更改为这一行:
def __init__(self, privileges=[]): (1)
self.privileges = privileges (2)
本站给出的答案是错误的。
如果您想要一个可选的权限列表,您需要一个默认参数值。请注意,因为 []
是一个可变值,所以您需要使用类似 None
的东西,并在函数内用一个新的空列表替换它。
class Privileges:
def __init__(self, privileges=None):
self.privileges = [] if privileges is None else privileges
在签名中使用默认值 []
意味着使用默认值创建的每个 Privileges
实例将共享 相同的 权限列表: 对一个实例权限的更改将在其他实例中可见。
我想问一个与Python'class'相关的问题,因为我在这个网站上练习练习9.8时卡在了这个例子上: https://ehmatthes.github.io/pcc_2e/solutions/chapter_9/#9-9-battery-upgrade
示例:写一个单独的权限class。 class 应该有一个属性 privileges,它存储一个字符串列表,如练习 9-7 中所述。将 show_privileges() 方法移动到此 class。在 Admin class 中创建一个 Privileges 实例作为属性。创建一个新的 Admin 实例并使用您的方法显示其权限。
#Seperate Privileges Class from Admin Class
#This is parent class
class User:
def __init__(person, first_name, last_name, age, location, mail):
person.first_name = first_name
person.last_name = last_name
person.age = age
person.location = location
person.mail = mail
person.login_attempts = 0
def describe_user(person):
print(f"User full name: {person.first_name} {person.last_name}")
print(f"User age: {person.age}")
print(f"User location: {person.location}")
print(f"User mail: {person.mail}")
def greet_user(person):
print(f"Hello {person.first_name} {person.last_name}!")
def increment_login_attempts(person):
person.login_attempts += 1
def reset_login_attempts(person):
person.login_attempts = 0
#This is child class Admin
class Admin(User):
def __init__(self, first_name, last_name, age, location, mail):
super().__init__(first_name, last_name, age, location, mail)
'''Initialize an empty set of privileges'''
self.privileges = Privileges()
#Seperate Privileges class:
class Privileges:
def __init__(self, privilege): (1)
self.privileges = [] (2)
def show_privileges(self):
print("\nAdministrator's privileges are:")
for privilege in self.privileges:
print(f"- {privilege}")
Tom = Admin('Tom', 'Felton', 23, "the UK", 'tomfelton@hotmail.com')
Tom.describe_user()
Tom.privileges.privileges = ["can add post", "can delete post", "can ban user", "can do bla bla"]
Tom.privileges.show_privileges()
执行完上面的全部代码后,我得到了这个错误:
我已经检查了上面同一站点的答案,但是我很难理解为什么我要把我的代码的第 (1) 行和第 (2) 行更改为这一行:
def __init__(self, privileges=[]): (1)
self.privileges = privileges (2)
本站给出的答案是错误的。
如果您想要一个可选的权限列表,您需要一个默认参数值。请注意,因为 []
是一个可变值,所以您需要使用类似 None
的东西,并在函数内用一个新的空列表替换它。
class Privileges:
def __init__(self, privileges=None):
self.privileges = [] if privileges is None else privileges
在签名中使用默认值 []
意味着使用默认值创建的每个 Privileges
实例将共享 相同的 权限列表: 对一个实例权限的更改将在其他实例中可见。