我目前正在使用Python Crash Course,我正在使用第9章 - Classes。我对某些事情感到困惑,需要澄清。我的问题设置很长,但我想彻底解决。
9-7:管理员
“管理员是一种特殊的用户。编写一个名为Admin的类,它继承自您在练习9-3(第166页)或练习9-5(第171页)中编写的User类。添加属性,权限,存储一个字符串列表,如“可以添加帖子”,“可以删除帖子”,“可以禁止用户”等等。写一个名为show_privileges()的方法,列出管理员的权限集。创建一个Admin实例,并打电话给你的方法。“
我用这段代码解决了9-7:
class Admin(User):
def __init__ (self, first_name, last_name):
super().__init__(first_name, last_name)
self.privileges = []
#For 9-8 the above lines changes to
#self.privileges = Privileges()
def show_privileges(self):
if self.privileges:
print("The admins privileges are")
for privilege in self.privileges:
print(privilege)
else:
print("There are no privileges set for this admin")
user1 = Admin("Foo", "Bar")
user1.show_privileges()
user1.privileges = [
'can add users ',
'can ban users ',
'can delete users ',
]
user1.show_privileges()
继续......
9-8特权
“编写一个单独的Privileges类。该类应该有一个属性,即存储字符串列表的属性,如练习9-7中所述。将show_privileges()方法移动到此类。将Privileges实例作为属性在Admin类中。创建一个新的Admin实例,并使用您的方法显示其权限。“
我用这段代码解决了9-8:
无可否认,作者在github上提供了一些解决方案。
class Privileges():
#A seperate privileges class
下面,我必须在self之后设置一个等于空列表的权限参数,但在9.7中这是在 init 下完成的。为什么需要改变?
def __init__(self, privileges=[]):
#Initialize self and privileges
self.privileges = privileges
为什么需要改变?
def show_privileges(self):
#A method to print the privileges of an admin
if self.privileges:
print("The admins privileges are")
for privilege in self.privileges:
print(privilege)
else:
print("There are no privileges set for this admin")
user1 = Admin('foo', 'bar')
user1.describe_user()
user1.privileges.show_privileges()
下面,我必须将列表设置为等于变量,而在9-7问题中,这不是必需的。
user1_privileges = [
"I do it all",
"Yes I do that that too"
]
下面,为什么在这里需要两个.privileges,当在9-7时我只需要在直接设置它时使用一个.privileges。
user1.privileges.privileges = user1_privileges
user1.privileges.show_privileges()
究竟 init 究竟是什么决定了它的参数?
我想我可以在9-7的类似庄园中解决这个问题,但我认为不需要进行上述修改。如果你能为我澄清一下,我很感激。