Python类澄清 - Python崩溃课程书

时间:2017-04-26 00:15:47

标签: python python-3.x class

我目前正在使用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的类似庄园中解决这个问题,但我认为不需要进行上述修改。如果你能为我澄清一下,我很感激。

0 个答案:

没有答案