2013-07-11 2 views
0

Я создаю эту программу, и одна из ее функций - вывести список, который инициализируется в конструкторе. Но, что происходит, это то, что он выводит ячейку памяти в шестнадцатеричном виде или что-то еще, и я не знаю почему.Как НЕ распечатать ячейку памяти 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) 

Я хочу, чтобы создать время цикла, которая принимает длину peoplelist и с условием а х < Len (C2C.people), то он присоединяет все имена людей на этой шине к списку у

как это ...

x = 0 
y = [] 

while x < len(C2C.people) : 
    y.append((C2C.people[x].get_name())) 
    x = x + 1 
    print(y) 

, но я получаю это в результате: Фред [None] Дженнифер [None, None]

+4

Если он говорит что-то вроде объекта Person в ', тогда вам нужно всего лишь определить способ' __str__' в вашем классе 'Person' – inspectorG4dget

+0

, как я это делаю? – Panthy

ответ

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 

Если вы хотите сделать свой цикл, он должен работать, как вы ожидаете в настоящее время.

Если вы хотите, чтобы я углубился в подробности, дайте мне знать, и я обновлю свой ответ.

+0

Я пробовал это !!!! Я получаю этот outpout print (C2C.people [0] .get_name()) Файл «D: \ Python \ Last Day it 01 \ LSAT DAY \ Transport.py», строка 30, в get_name print (self. name) AttributeError: объект 'Bus' не имеет атрибута 'name' – Panthy

+0

Вы включили круглые скобки()? – mbdavis

+0

да сэр я действительно включил круглые скобки – Panthy

3

При использовании функции print() (или утверждение, предварительно 3.0), питон не спрашивает objecs вы печатаете, чтобы преобразовать себя в строки; через функцию __str__. Поскольку object определяет этот метод для вас, он всегда работает; но предопределенная версия не очень помогает (в том виде, в котором вы видите).

Оставьте свой собственный. Она не принимает никаких аргументов и должны возвращать строку:

class Foo: 
    bar = 'baz' 

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

да, но в этом случае у меня есть класса Bus: self.people = [] тогда я написал четкости __str __ (Я): возвращение self.people , но это не изменит ничего – Panthy

+0

'само. люди - явно не строка. убедитесь, что вы пишете полезный метод '__str__' для каждого класса, который вы пишете. – SingleNegationElimination

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 
Смежные вопросы