题目来源
这个题目来自:《Python编程:从入门到实践》第1版,习题9-12:多个模块
相关代码
user.py
class User():
def __init__(self, first_name, last_name, sex, age):
self.first_name = first_name.title()
self.last_name = last_name.title()
self.sex = sex
self.age = age
def describe_user(self):
--snip--
def greet_user(self):
--snip--
admin_privileges.py
from user import User
class Admin(User):
def __init__(self, first_name, last_name, sex, age):
super().__init__(first_name, last_name, sex, age)
self.privileges = Privileges()
class Privileges():
def __init__(self):
self.privileges = ['can add post', 'can delete post',
'can ban user']
def show_privileges(self):
print("Admin's privileges: ")
for privilege in self.privileges:
print("--" + privilege)
test.py
from admin_privileges import Admin
my_admin = Admin('Jade', 'Lam', 'male', '22')
my_admin.describe_user()
my_admin.greet_user()
my_admin.privileges.show_privileges()
print('
')
你期待的结果是什么?实际看到的错误信息又是什么?
我在书上9.4.1(P155)看到,“import语句让Python打开模块car,并导入其中的Car类。这样我们就可以使用Car类了,就像它是在这个文件中定义一样”
所以我认为,在‘test.py’中只导入了admin模块中的Admin类,就相当于只复制了class Admin()的相关代码,而缺少了‘admin_privileges.py’中的from user import User 和class Privileges()的相关代码。这样一来,在‘test.py’中,无论是Admin类的实例化,还是最后调用这个实例的属性中privileges的show_privileges,都应该会报错啊。
但是,书中的答案就是这样写的,运行也出现了想要的结果。
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…