代码如下
#
class User():
def init(self , name , gender , *other_info):
self.name=name
self.gender=gender
def show_information(self):
print('Here is information about ' + self.name.title())
print(self.gender + self.other_information)
class Privileges():
def init(self):
self.privileges = ['can ban user' , 'can add post' , 'can delete post']
class Admin(User):
def init(self , name , gender , *other_info):
super().init(name , gender , *other_info)
self.privileges=Privileges()
def show_info(self):
print('Things of admin :')
print(str(self.privileges))
test = Admin('jack' , 'male')
test.show_info()
print(test.privileges)
输出如下
网上搜索后,发现输出的是实例的存储位置,类似案例中的另一个人的解决方法是将-str-改为-repe-,我尝试后,输出没有改变,还是存储位置,非常苦恼,也没有再搜到过其他的解决方法。
希望有经验的同志能指点一下迷津,非常感谢!
同志们啊同志们,经过专家指导后,我做出了如下修改:
1.不在 class Privileges()类中直接赋值列表,而是在运行实例时,先将列表定义为某一个变量,再将实例的privileges赋值为该变量,再运行show_info
修正的代码如下:
class User():
-------snip-----
class Privileges():
def init(self,privileges=[]):
self.privileges = privileges
class Admin(User):
--------snip------
test = Admin('jack' , 'male')
test_priveleges=['can ','can']
test.privileges=test_priveleges
test.show_info()
提醒:在Privileges后的括号中要给privileges赋值为空列表。
还在努力学习中,语言不严谨规范望见谅。
虽然不懂原理,但总之修改后,行之有效。
Python 也要理解原理的, 否则路走不远。
找时间补一下 面向对象的基础知识。
简单一句话, 先把需求逻辑搞明白,然后写伪代码,再变成真正的代码
你的需求大概是这样吧
Privileges类
privileges属性
privileges_info()方法
输出privileges属性
User类
姓名属性
性别属性
Admin类(继承User类)
然后完成基本框架
class User():
def __init__(self , name , gender , *other_info):
self.name=name
self.gender=gender
def show_information(self):
print('Here is information about ' , self.name, self.gender)
class Privileges():
def __init__(self):
self.privileges = ['can ban user' , 'can add post' , 'can delete post']
def info(self):
return self.privileges
class Admin(User):
def __init__(self, name, gender, *other_info):
super().__init__(name, gender, *other_info)
self.privileges = Privileges()
def get_privileges_info(self):
return self.privileges.info()
def show_user_privileges(self):
print("Admin",self.name,"Privileges", self.get_privileges_info())
my = Admin("Jack", 'male')
print(my.get_privileges_info())
my.show_user_privileges()
先不管代码, 先描述你要做什么?
如果要print()
那参数是要可以打印的东西, 或者是有 缺省 str 函数的类型。
两种方法解决
1、 self.privileges=Privileges() 改为 赋值 字符串 或者 列表都可以。
2、Admin类增加一个privileges_info() 函数, 返回字符串。
print(test.privileges_info() )
def privileges_info(self):
self.privileges=Privileges() #这里是 新建一个 Privileges 实例,然后把这个类地址赋值给 self.privileges , 所以 self.privileges 还是类Privileges 实例 的地址。
return self.privileges
接下来的你修改方向是 对 Privileges 类增加一个 info() 方法, 返回 ['can ban user' , 'can add post' , 'can delete post']
然后把
def privileges_info(self):
self.privileges=Privileges()
return self.privileges
改为
def privileges_info(self):
self.privileges=Privileges()
return self.privileges.info()