如何不打印内存位置python

时间:2013-07-11 21:24:49

标签: python

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

我有两个类和一个运行类:

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)

但是我得到了这个结果: 弗雷德 [没有] 詹妮弗 [无,无]

3 个答案:

答案 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