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