关于Python速成班(第二版)中练习9-8的解决方案,我有一个问题。这些守则如下:
class User():
"""Represent a simple user profile."""
def __init__(self, first_name, last_name, username, email, location):
"""Initialize the user."""
self.first_name = first_name.title()
self.last_name = last_name.title()
self.username = username
self.email = email
self.location = location.title()
self.login_attempts = 0
def describe_user(self):
"""Display a summary of the user's information."""
print(f"\n{self.first_name} {self.last_name}")
print(f" Username: {self.username}")
print(f" Email: {self.email}")
print(f" Location: {self.location}")
def greet_user(self):
"""Display a personalized greeting to the user."""
print(f"\nWelcome back, {self.username}!")
class Admin(User):
"""A user with administrative privileges."""
def __init__(self, first_name, last_name, username, email, location):
"""Initialize the admin."""
super().__init__(first_name, last_name, username, email, location)
# Initialize an empty set of privileges.
self.privileges = Privileges()
class Privileges():
"""A class to store an admin's privileges."""
def __init__(self, privileges=[]):
self.privileges = privileges
def show_privileges(self):
print("\nPrivileges:")
if self.privileges:
for privilege in self.privileges:
print(f"- {privilege}")
else:
print("- This user has no privileges.")
eric = Admin('eric', 'matthes', 'e_matthes', 'e_matthes@example.com', 'alaska')
eric.describe_user()
eric.privileges.show_privileges()
print("\nAdding privileges...")
eric_privileges = [
'can reset passwords',
'can moderate discussions',
'can suspend accounts',
]
eric.privileges.privileges = eric_privileges
eric.privileges.show_privileges()我的问题是关于第二行。我理解第一个“特权”指的是类Admin中的实例。那么,第二个“特权”呢?
事先非常感谢!
发布于 2021-01-01 15:45:56
要回答您的问题,是因为Admin包含self.privileges = Privileges(),然后Privileges类再次包含self.privileges = privileges。
我不知道他们为什么要这样安排。这段代码有点粗略。仅Privileges类就有多个奇怪的东西:
你不需要class Privileges():.
privileges=[]中的()是nearly always wrong。从来没有一个可变的默认argument.
Admin的方法,或者作为接受admin.privileges作为参数的独立函数。它没有封装任何东西,所以它实际上只是使代码变得比它所需要的更复杂。我会谨慎地听取这个消息来源的建议。
发布于 2021-01-01 15:44:44
类管理有一个属性self.privileges,它是类特权的对象。类特权还有一个名为self.privileges的属性。
类管理,属性特权->类特权,属性特权
eric.privileges.privileges = eric_privileges
发布于 2021-01-01 15:46:29
class Privileges():
"""A class to store an admin's privileges."""
def __init__(self, privileges=[]):
self.privileges = privileges不知道为什么但是在想这行代码,
在文件末尾添加此内容
print('***************')
for property, value in vars(eric).items():
print(property, ":", value)
print('***************')
print(type(eric.privileges))
print(eric.privileges)
print('id : ',id(eric.privileges))
for property, value in vars(eric.privileges).items():
print(property, ":", value)
print('***************')
print(type(eric.privileges.privileges))
print(eric.privileges.privileges)
print('id : ',id(eric.privileges.privileges))给予:
***************
first_name : Eric
last_name : Matthes
username : e_matthes
email : e_matthes@example.com
location : Alaska
login_attempts : 0
privileges : <__main__.Privileges object at 0x7fd795456be0>
***************
<class '__main__.Privileges'>
<__main__.Privileges object at 0x7fd795456be0>
id : 140563899050976
privileges : ['can reset passwords', 'can moderate discussions', 'can suspend accounts']
***************
<class 'list'>
['can reset passwords', 'can moderate discussions', 'can suspend accounts']
id : 140563932329856我猜这两种特权是相关的,但略有不同。
根据答案之一:正如一个:类管理有一个属性self.privileges,它是类特权的一个对象。类特权还有一个名为self.privileges的属性。类管理,属性特权->类特权,属性特权eric.privileges.privileges = eric_privileges
https://stackoverflow.com/questions/65531065
复制相似问题