【问题标题】:Having problems showing an attribute from instance class在显示实例类的属性时遇到问题
【发布时间】:2022-12-18 13:04:39
【问题描述】:

我知道有一个类似的帖子,但按照它我无法解决问题。

我有一个主类“User”,一个从“User”继承方法的子类“Admin”。然后我有一堂课“特权”。在“Admin”中有一个“Priviledges”实例。我希望“权限”显示“管理员”中的属性“名称”,但它不起作用。你能帮助我吗?

对不起,我知道特权,是特权,英语不是我的主要语言。

代码:

class User:
    
    def __init__(self, name, last_name, age, city, job):
        self.name = name
        self.last_name = last_name
        self.age = age
        self.city = city
        self.job = job
        self.login_attempts = 0
    
    def describe_user(self):
        print(f"The user's name is {self.name.title()} {self.last_name.title()},\n is {self.age} years old,\n he comes from {self.city.title()},\n his job is {self.job}.")
        print(f"Welcome {self.name.title()}.\n")   

    def increment_login_attempts(self):
        self.login_attempts += 1
        print(f"Login attemps: {self.login_attempts}")
        
    def reset_login_attempts(self):
        self.login_attempts = 0
        print(f"Login attemps: {self.login_attempts}")


class Admin(User):
    def __init__(self, name, last_name, age, city, job):
        super().__init__(name, last_name, age, city, job)
   
        self.prvldgs = Priviledges()        
        

class Priviledges(Admin): 

    def __init__(self, name):
        super().__init__(name)
        
        self.priviledges = ['can add posts', 'can delete posts', 'can ban users']
        
        self.name = name
        
    def show_priviledges(self):
        print(f"{self.name} has these priviledges:\n", self.priviledges)

        
john_admin = Admin('john', 'haward', '32', 'new york', 'writer')

john_admin.prvldgs.show_priviledges()

john_admin.describe_user()

输出:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Input In [34], in <cell line: 52>()
     43         print(f"{self.name} has these priviledges:\n", self.priviledges)
     50 mark = User('mark', 'hamilton', '23', 'livorno', 'journalist')
---> 52 john_admin = Admin('john', 'haward', '32', 'new york', 'writer')
     55 john_admin.prvldgs.show_priviledges()
     57 john_admin.describe_user()

Input In [34], in Admin.__init__(self, name, last_name, age, city, job)
     27 def __init__(self, name, last_name, age, city, job):
     28     super().__init__(name, last_name, age, city, job)
---> 30     self.prvldgs = Priviledges()

TypeError: __init__() missing 1 required positional argument: 'name'

预期结果:

Jhon has these priviledges:
 ['can add posts', 'can delete posts', 'can ban users']
The user's name is John Haward,
 is 32 years old,
 he comes from New York,
 his job is writer.
Welcome John.

【问题讨论】:

  • 你期望super().__init__(name)如何在Priviledges__init__方法中工作?超类Admin需要5个参数。顺便说一句,“特权”的正确拼写是“特权”。
  • 还有一些:Privileges 不应该是 Admin 的子类。管理员或用户可能拥有特权,但它们不是特权。

标签: python class attributes arguments instance


【解决方案1】:
class Admin(User):
    def __init__(self, name, last_name, age, city, job):
        super().__init__(name, last_name, age, city, job)
   
        self.prvldgs = Priviledges() 


class Priviledges(Admin): 

    def __init__(self, name):
        super().__init__(name)

要初始化类 Priviledges,您需要参数 name。 您正在初始化一个没有任何参数的实例:self.prvldgs = Priviledges()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多