如何在不使用Python子类的情况下从另一个类继承属性

2024-05-14 22:15:53 发布

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

我对python中的OOP非常陌生,为了好玩,我创建了一个程序来区分用户和管理员

class User():
    def __init__(self, first_name, last_name, gender, age, country):
        """
        Description of the user
        """
        self.first_name = first_name
        self.last_name = last_name
        self.gender = gender
        self.age = age
        self.country = country
        self.login_attempts = 0
        self.admin = Admin(privileges='')

    def describe_user(self): 
        """
        Printing the users information, if the user is admin do not give any information
        """
        if self.first_name == "Arman" and self.last_name == "Cam":
            print("This information is classified")
        else:
            print("First Name: ", self.first_name)
            print("Last Name:", self.last_name)
            print("Gender:", self.gender)
            print("Age:", self.age)
            print("Country:", self.country)

    def greet_user(self):
        """
        Greeting the users
        """  
        if self.first_name == "Arman" and self.last_name == "Cam":
            print("Hello Admin!\nWelcome to the AQT Server")
        else:
            print("Hello", self.first_name, "!\nWelcome to the AQT Server\n")


class Admin():
    def __init__(self, privileges=''):
        self.privileges = privileges

    def show_privileges(self):
        """
        Showing the privileges of the admin
        """
        print(self.privileges)

    def add_privileges(self, new_privilege):
        """
        Adding a new privilege if needed
        """
        self.privileges += new_privilege


user1 = User("Arman", "Cam", "Male", 20, "Canada")
user1.greet_user()
user1.describe_user()
user1.admin.add_privileges("ban user")
user1.admin.show_privileges()

现在,我想修改Admin类中的show_privileges方法,以便

def show_privileges(self):
    """
    Showing the privileges of the admin
    """
    if self.first_name == "Arman" and self.last_name == "Cam":
        print(self.privileges)
    else:
        print("You have no privilege")

但在这种情况下,ofc的代码给了我一个错误。因为self.first_name没有在Admin子类中定义

为了让事情顺利进行,我可能会创建一个子类,但接下来我必须编写如下内容

user1 = Admin("Arman", "Cam", "Male", 20, "Canada")

这是我现在想要的。我希望Admin成为User类中的一个属性

那么,如果不使用子类方法,如何在Admin类中添加self.first_name

另外,由于用户有很多参数,是否有一个快捷语法用于在其他函数中传递User的所有参数

注:子类方法是指Admin(User)


Tags: thenameselfifadmindeffirstlast

热门问题