为什么通过用户类中的属性连接的Privileges类不能正常工作?

2024-05-14 15:02:29 发布

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

基本上,我一直在和班级一起工作,从Python速成课程这本书中了解他们,有两个问题我必须回答;第一个是关于制作一个程序来识别用户是否是管理员,如果他们是管理员,代码应该打印出来,他们有额外的特权,第二个代码是相同的,但我必须制作一个额外的类,称为特权,这是用户类中的一个属性。但是代码做了同样的事情(),它只是更干净

我的第一个代码(有效的代码!):

class User:

    def __init__(self, first_name, last_name, address, phone_number):
        self.first_name = first_name
        self.last_name = last_name
        self.full_name = first_name + " " + last_name
        self.address = address
        self.phone_number = phone_number
        self.privileges = ["can add post", "can delete post", "can ban user"]

    def describe_user(self):
        print("\nName: " + self.full_name.title() + 
              "\nAddress: " + self.address.title() +
              "\nphone_number: " + str(self.phone_number))

    def greet_user(self):
        print("\nGreetings " + self.first_name.title() + ".")

    def show_privileges(self):
        print()
        if self == Admin:
            for privilege in self.privileges:
                print(privilege)
        else:
            print("Sorry but you are not the Admin." +
                "\nYou have limited privileges.")

Admin = User('Nebojsa', 'Kukic', 'A box under the bridge', 353838935494)
Admin.show_privileges()

user_2 = User("Siobhan", "O'Neill", "66 The Hermitage", 353831681859)
user_2.show_privileges()

输出:

can add post
can delete post
can ban user

Sorry but you are not the Admin.
You have limited privileges.

如您所见,假设self在条件测试中等于Admin或user2,但由于我的另一段代码(不起作用的代码:'():

class Privileges:

    def __init__(self):
        self.user_privileges = ["can add post", "can delete post", "can ban user"]

    def show_privileges(self):
        print()
        if self == Admin:
            for user_privilege in self.user_privileges:
                print(_user_privilege)
        else:
            print("Sorry but you are not the Admin." +
                  "\nYou have limited privileges.")


class User:

    def __init__(self, first_name, last_name, address, phone_number):
        self.first_name = first_name
        self.last_name = last_name
        self.full_name = first_name + " " + last_name
        self.address = address
        self.phone_number = phone_number
        self.privileges = Privileges()

    def describe_user(self):
        print("\nName: " + self.full_name.title() + 
              "\nAddress: " + self.address.title() +
              "\nphone_number: " + str(self.phone_number))

    def greet_user(self):
        print("\nGreetings " + self.first_name.title() + ".")


Admin = User('Nebojsa', 'Kukic', 'A box under the bridge', 353838935494)
Admin.privileges.show_privileges()

user_2 = User("Siobhan", "O'Neill", "66 The Hermitage", 353831681859)
user_2.privileges.show_privileges()

输出:

Sorry but you are not the Admin.
You have limited privileges.

Sorry but you are not the Admin.
You have limited privileges.

我不明白为什么管理实例不返回:

can add post
can delete post
can ban user

但结果却是:

Sorry but you are not the Admin.
You have limited privileges.

我不明白为什么自我不等于管理? 再次抱歉,问题太长了,谢谢


Tags: thenameselfnumberadminaddressdefphone
1条回答
网友
1楼 · 发布于 2024-05-14 15:02:29

首先,这不是一个好方法

但是无论如何,self不是等于Admin,这是一个User对象self将是Privileges对象。。。更好的方法是创建一个布尔属性,说明是否有管理员权限,例如:

class Privileges:
    def __init__(self, is_admin=False):
        self.user_privileges = ["can add post", "can delete post", "can ban user"]
        self.is_admin = is_admin

    def show_privileges(self):
        print()
        if self.is_admin:
            for user_privilege in self.user_privileges:
                print(user_privilege)
        else:
            print("Sorry but you are not the Admin." +
                  "\nYou have limited privileges.")

相关问题 更多 >

    热门问题