我正在创建这个程序,它的一个功能是输出一个在构造函数中初始化的列表。但是,正在发生的是它以十六进制或其他方式输出内存位置,我不知道为什么。
我有两个类和一个运行类:
class Person :
def __init__(self, name, ID, age, location, destination):
self.name = name
self.ID = ID
self.age = age
self.location = location
self.destination = destination
def introduce_myself(self):
print("Hi, my name is " + self.name + " , my ID number is " + str(self.ID) + " I am " + str(self.age) + " years old")
def get_route(self):
return self.location + self.destination
def add2bus(self, Bus):
if Person.get_route(self) == Bus.get_route() :
Bus.get_on(Bus)
else :
print("not compatible")
def get_name(self):
print(self.name)
import People
class Bus :
def __init__(self, name, capacity, location, destination):
self.bus_name = name
self.bus_capacity = capacity
self.bus_location = location
self.bus_destination = destination
self.seats = []
self.people = []
def Bus_properties(self):
print(self.bus_name + ", " + str(self.bus_capacity) + ", " + self.bus_location + ", " + self.bus_destination)
def print_list(self):
a = self.people
print(self.people)
def get_route(self):
return self.bus_location + self.bus_destination
def get_on(self, Person):
if len(self.people) < 20: #Loop through all the seats
self.people.append(Person)
else:
print('fulll')
def get_name(self):
print(self.name)
import People
import Transport
C2C = Transport.Bus("C2C", 30, "Ithaca", "New York")
Fred = People.Person("Fred", 12323, 13, "Ithaca", "New York")
Jennifer = People.Person("Jennifer", 111117, 56, "Ithaca", "New York")
Fred.add2bus(C2C)
Jennifer.add2bus(C2C)
我想创建一个while循环,它接受peoplelist的长度和条件,而x&lt; len(C2C.people)然后它将该总线上所有人的名字附加到列表y
像这样......x = 0
y = []
while x < len(C2C.people) :
y.append((C2C.people[x].get_name()))
x = x + 1
print(y)
但是我得到了这个结果: 弗雷德 [没有] 詹妮弗 [无,无]
答案 0 :(得分:5)
首先,您将使用add2bus方法作为人员发送总线。
def add2bus(self, Bus):
if Person.get_route(self) == Bus.get_route() :
Bus.get_on(Bus)
else :
print("not compatible")
所以这将把C2C作为总线对象,然后调用C2C.get_on(C2C)
相反,你想做:
Bus.get_on(self)
然后要获得此人的姓名,您可以这样做。
C2C.people[0].get_name().
调用此选项将打印乘客的姓名,但您要做的是将乘客的姓名作为字符串返回,这就是返回的名称。 所以在人们的get_name()方法而不是print(self.name)中,返回它。现在上面的语句将成为字符串self.name。
像这样:
def get_name(self):
return self.name
当你想要进行循环时,它应该按照你现在的预期工作。
如果您希望我详细了解,请告诉我,我会更新我的答案。
答案 1 :(得分:3)
当您使用print()
函数(或语句,3.0之前)时,python会询问您要打印的对象以将自身转换为字符串;通过__str__
功能。由于object
为您定义了此方法,因此它始终有效;但预定义的版本不是很有帮助(以你看到的方式)。
提供自己的。它不需要参数,必须返回一个字符串:
class Foo:
bar = 'baz'
def __str__(self):
return "Friendly Foo Description: " + bar
答案 2 :(得分:2)
正如@ inspectorG4dget所说,定义一个__str__
方法来覆盖打印的内容。
>>> 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