Есть ли способ напечатать экземпляр класса из атрибута? - PullRequest
0 голосов
/ 11 марта 2019

Я новичок в python (и вообще программирую), и мне интересно, есть ли способ напечатать / найти объект, если вы знаете атрибут. Например, если у меня есть такой класс:

class Employee:
    def __init__(self, nameLast, nameFirst, age, sex):
        self.nameLast = nameLast
        self.nameFirst = nameFirst
        self.age = age
        self.sex = sex
e1 = Employee("Doe", "John", 35, "male")
e2 = Employee("Donevan", "Jane", 32, "female")
e3 = Employee("McHipster", "Ron", 26, "male")

И я знал фамилию, например "Doe", я мог использовать ее, чтобы получить и напечатать или сохранить экземпляр "e1".

mystery_function("Doe")
# Output: e1

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

EDIT:

Итак, я чувствую, что мне нужно объяснить остальное, что я пытаюсь сделать. После получения экземпляра e1 мне нужно использовать его в следующей функции.

Идея состоит в том, что когда пользователь ищет имя (например, Doe), программе необходимо найти объект, чтобы использовать его в следующей функции ... что-то вроде:

def func_next(e): # Where e1 is the output from the previous bit
    print("Hi my name is " + e.nameLast + ", " + e.nameFirst + ", a "
          + str(e.age) + " year old " + e.sex + " working at Company X.")
func_next(e1)
# Hi my name is Doe, John, a 35 year old male working at Company X.

Надеюсь, это имеет смысл. Насколько я понимаю, e1 не может быть строкой, потому что она не будет работать в последующих функциях. Выложенный мною код является (по общему мнению, глупым) примером, но он передает то, что я пытаюсь сделать:

Ввод (строка и атрибут объекта) -> ссылка на объект (например, e1) -> function(e) (где e - ссылка на объект) -> вывод

1 Ответ

0 голосов
/ 11 марта 2019

Вы можете обмануть свой путь, создав словарь:

dct = {e1.nameLast: "e1", e2.nameLast: "e2", e3.nameLast: "e13"}
print(dct["Doe"])
# e1

это может быть не лучшее представление ваших данных в виде словаря, хотя ... это может быть более подходящим:

dct = {e.nameLast: e for e in (e1, e2, e3)}
employee_doe = dct["Doe"]
print(employee_doe)

и чтобы получить хороший вывод, вы должны добавить __str__ метод в ваш класс.


ответ на ваше обновление:

dct = {e.nameLast: e for e in (e1, e2, e3)}
employee_doe = dct["Doe"]
func_next(employee_doe)

так что все это работает так, как вы ожидаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...