Python 如何不打印出内存位置

Python 如何不打印出内存位置,python,Python,我正在创建这个程序,它的一个功能是输出一个在构造函数中初始化的列表。但是,发生的事情是,它以十六进制或其他形式输出内存位置,我不知道为什么 我有两个班和一个跑步班: 班长: 定义初始自我、姓名、ID、年龄、位置、目的地: self.name=名称 self.ID=ID self.age=年龄 self.location=位置 self.destination=目的地 def自我介绍: printHi,我的名字是+self.name+,我的身份证号码是+strself.ID+我是+strself.

我正在创建这个程序,它的一个功能是输出一个在构造函数中初始化的列表。但是,发生的事情是,它以十六进制或其他形式输出内存位置,我不知道为什么

我有两个班和一个跑步班:

班长: 定义初始自我、姓名、ID、年龄、位置、目的地: self.name=名称 self.ID=ID self.age=年龄 self.location=位置 self.destination=目的地 def自我介绍: printHi,我的名字是+self.name+,我的身份证号码是+strself.ID+我是+strself.age+岁 def获取路径自身: 返回self.location+self.destination def add2busself,总线: 如果Person.get_路线self==Bus.get_路线: 公共汽车,上车 其他: 打印不兼容 def get_名称自身: printself.name 引进人才 班车: 定义初始自身、名称、容量、位置、目的地: self.bus_name=名称 self.bus_容量=容量 self.bus_location=位置 self.bus_destination=目的地 self.seats=[] self.people=[] def总线_属性自身: 打印self.bus_name+,+strself.bus_capacity+,+self.bus_location+,+self.bus_destination def打印列表自身: a=自我意识 印刷自我人 def获取路径自身: 返回self.bus\u位置+self.bus\u目的地 def自救,人员: 如果lenself.people<20:在所有座位上循环 自我的人 其他: 打印“full” def get_名称自身: printself.name 引进人才 进口运输 C2C=运输。纽约伊萨卡30号巴士C2C Fred=人。PersonFred,12323,13,纽约州伊萨卡 Jennifer=People.Person Jennifer,11111 7,56,纽约州伊萨卡 Fred.ADD2BUC2C Jennifer.Add2Buc2C 我想创建一个while循环,它取peoplelist的长度,条件是whilex 像这样

x = 0
y = []

while x < len(C2C.people) :
    y.append((C2C.people[x].get_name()))
    x = x + 1
    print(y)
但我得到的结果是: 弗莱德 [无] 珍妮弗 [None,None]

在3.0之前使用print函数或语句时,python会要求正在打印的对象将其自身转换为字符串;通过_str__函数。因为对象为您定义了这个方法,所以它总是有效的;但是预定义的版本在您看到的方式上并没有太大帮助

提供你自己的。它不接受参数,并且必须返回字符串:

class Foo: 
    bar = 'baz'

    def __str__(self):
        return "Friendly Foo Description: " + bar

正如@inspectorG4dget所说的,定义一个_ustr_uu方法来覆盖打印的内容

>>> class A(object):
...     pass
...
>>> print(A())
<__main__.A object at 0x10ca829d0>
>>>
>>> class B(object):
...     def __str__(self):
...             return "I am a B"
...
>>> print(B())
I am a B

首先,您以add2bus方法中的人的身份发送总线

def add2bus(self, Bus):
        if Person.get_route(self) == Bus.get_route() :
            Bus.get_on(Bus)

        else :
            print("not compatible")
因此,这将以C2C作为总线对象,然后调用C2C.get_onC2C

相反,您希望执行以下操作:

Bus.get_on(self)
然后,要想知道这个人的名字,你可以这样做

C2C.people[0].get_name(). 
调用此函数将打印乘客的姓名,但您要做的是将乘客的姓名作为字符串返回,这就是return所做的。 因此,在people的get_name方法中,不要执行printself.name,而是返回它。现在,上面的语句将成为字符串self.name

像这样:

def get_name(self):
   return self.name
当您想要执行循环时,它应该像您现在期望的那样工作


如果您想让我进一步了解更多细节,请告诉我,我会更新我的答案。

如果它说的是类似于Person object at的内容,那么您需要做的就是在Person类中定义一个u str_u_u_u_u方法是的,但在这种情况下,我有一个类Bus:self.people=[]然后我写了def_ustr_uself:return self.people,但它不会改变任何东西self.people显然不是字符串。确保为您编写的每个类都编写了一个有用的_ustr__;方法。我试过了!!!!我得到了这个输出printC2C.people[0]。get_name文件D:\Python\Last Day it 01\LSAT Day\Transport.py,第30行,在get_name printself.name AttributeError中:“Bus”对象没有属性“name”是否包含括号?等等,只要再读一遍代码,很多事情都没有任何意义。有一个人,我每周至少在上班的路上见到一次,他总是告诉公交车上车,并要求随机的无生命物体告诉他他们的名字。尽管他通常调用whatsyername_朋克函数,而不是get_name函数。@mbdavis我不能这样做,因为我的get-on函数有两个参数,bus和person。这是因为我需要在人物列表中添加人物