|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 coward0720 于 2024-12-15 10:21 编辑
最近遇到一个问题:
编写一个名为Privileges 的类,它只有一个属性——privileges ,其中存储了练习9-7 所说的字符串列表。将方法show_privileges() 移到这
个类中。在Admin 类中,将一个Privileges 实例用作其属性。创建一个Admin 实例,并使用方法show_privileges() 来显示其权限。
代码如下:
class User:
def __init__(self, first_name, last_name, login_attempts):
self.first = first_name
self.last = last_name
self.login = login_attempts
def describe_user(self):
print(f'这个用户的名字叫{self.first} {self.last.upper()}')
def greet_user(self):
print(f'Hello, {self.first} {self.last.title()}, FBI欢迎您~~~')
def increment_login_attempts(self):
self.login += 1
def reset_login_attempts(self):
self.login = 0
class Admin(User):
def __init__(self, privileges):
self.privileges = Privileges()
def show_privileges(self):
for i in self.privileges:
print(f'{i}')
class Privileges:
def __init__(self, privileges):
self.privileges = ['can add post', 'can delete post', 'can ban user']
def show_privileges(self):
for i in self.privileges:
print(f'{i}')
gao = Admin()
gao.privileges.show_privileges()
最后程序报错:
Traceback (most recent call last):
File "E:/GXY/pythonTest/练习专用/练习.py", line 543, in <module>
gao.privileges.show_privileges()
AttributeError: 'Privileges' object has no attribute 'show_privileges'
请问问题出在哪里呢?为什么Admin类不能直接调用Privileges类中的self.privileges呢?
看起来代码中有几个问题,导致了程序报错。我们来逐步解决这些问题:
1. **Admin类的构造函数有误**:你的`Admin`类的构造函数应该接受`first_name`, `last_name`, `login_attempts`以及`privileges`参数,并且要调用父类`User`的构造函数。
2. **Privileges类的属性名称和初始化**:`Privileges`类中你初始化的属性名称和你实际想要使用的属性名称不一致。同时,属性`self.pr`未设置任何初始值。
3. **调用错误的属性**:`gao.pr.show_privileges()`中使用了错误的属性名称,应为`gao.privileges.show_privileges()`。
以下是根据你的描述修改后的代码:
- class User:
- def __init__(self, first_name, last_name, login_attempts):
- self.first = first_name
- self.last = last_name
- self.login = login_attempts
- def describe_user(self):
- print(f'这个用户的名字叫{self.first} {self.last.upper()}')
- def greet_user(self):
- print(f'Hello, {self.first} {self.last.title()}, FBI欢迎您~~~')
- def increment_login_attempts(self):
- self.login += 1
- def reset_login_attempts(self):
- self.login = 0
- class Admin(User):
- def __init__(self, first_name, last_name, login_attempts, privileges):
- super().__init__(first_name, last_name, login_attempts)
- self.privileges = Privileges(privileges)
- def show_privileges(self):
- self.privileges.show_privileges()
- class Privileges:
- def __init__(self, privileges):
- self.privileges_list = privileges
- def show_privileges(self):
- for privilege in self.privileges_list:
- print(privilege)
- privileges = ["can add post", "can delete post", "can ban user"]
- gao = Admin('Gao', 'Xiao', 0, privileges)
- gao.show_privileges()
复制代码
解释:
- 在`Admin`类中,我们初始化了`Privileges`实例,并传入了`privileges`列表。
- `Privileges`类中,我们将属性命名为`self.privileges_list`,并在方法`show_privileges`中正确地迭代显示权限。
- 创建`Admin`实例时,要传入全部必须的参数,并调用`show_privileges`方法显示权限。
这样,代码就是可运行的了。试试看!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
|
|