为什么我的python打印类中实例时显示的是存储位置

代码如下
#
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)

输出如下

img

网上搜索后,发现输出的是实例的存储位置,类似案例中的另一个人的解决方法是将-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()