【发布时间】: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