有没有一种方法可以从属性中打印类的实例?

时间:2019-03-11 15:41:17

标签: python python-3.x oop

我是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

就像我说的那样,我是编码的新手,所以我可能缺少一些简单的东西,但是我在网上寻找解决方案已有几个小时,但是我没有任何运气。

编辑:

所以,我觉得我需要解释我想做的其余事情。一旦有了实例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 :(得分:0)

您可以通过创建字典来欺骗自己:

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)

所以这一切都如您所愿。