9-8 权限:编写一个名为Privileges的类,它只有一个属性——privileges,其中存储了练习9-7所说的字符串列表。将方法show_privileges()移到这个类中。在Admin类中,将一个Privileges实例用作其属性。创建一个Admin实例,并使用方法show_privileges()来显示其权限
class User():
def __init__(self,name,city):
self.name=name
self.city=city
def show_users(self):
print(self.name+" "+self.city)
class Privileges():
def __init__(self,*set_privileges):
self.set_privileges=set_privileges##注意此处①
def show_privileges(self):
print("privileges:")
for i in self.set_privileges:
print(i)
class Admin(User):
def __init__(self,name,city):
super().__init__(name,city)
self.privileges=Privileges()##注意此处②
admin=Admin('xiaofang','wuxi')
admin.privileges.set_privileges=["can add post","can delete post"]##③
admin.show_users()
admin.privileges.show_privileges()
注意同名变量,③处因为admin中构造函数只有两个形参,privileges的值无法利用实参传递给形参
如果
class Privileges():
def __init__(self,*set_privileges):
self.set_privileges=set_privileges##注意此处①
def show_privileges(self):
print("privileges:")
for i in self.set_privileges:
print(i)
此处改为
class Privileges():
def __init__(self):
self.set_privileges=["can add post","can delete post","can ban user"]
def show_privileges(self):
print("privileges:")
for i in self.set_privileges:
print(i)
结果一样,在__inti__()方法中指定初始值后,无需为该属性提供初始值的形参