如何使类的默认返回值成为字典

时间:2018-11-25 02:41:09

标签: python python-3.x python-2.7

我希望标题对我来说足够清楚,老实说,我并没有做太多尝试,因为我并不真正知道该去哪里,而且我甚至不确定这是完全可能的。我知道可以覆盖__str____int__以返回这两种类型的值。我确定您在问“为什么没有一个类函数返回您想要的东西”,并确定它是一个合理的问题,但是我想要一种更简洁的方法来实现。

我搜索了其他可能有助于解决问题的类似问题和示例,但没有一个能真正达到我的预期。我可以从下面尝试覆盖__new____repr__的示例中获得最接近的结果。

class student:
    def __init__(self, name, age):
        self.info = {'name': name, 'age': age}
    def __new__(self, name, age):
        return self.info
    def __repr__(self, name, age):
        return self.info
student_data = student('Rob', 18)

print(student_data)

预先感谢

2 个答案:

答案 0 :(得分:1)

你很近。 __str____repr__都必须返回一个字符串。 print将在内部调用对象的__str__表示形式。因此,只需让您的__str__方法返回self.info的字符串表示形式(IOW str(self.info))即可。

class Student:
    def __init__(self, name, age):
        self.info = {'name': name, 'age': age}

    def __repr__(self):
        return str(self.info)

    def __str__(self):
        return self.__repr__()

student_data = Student('Rob', 18)
print(student_data)
# {'name': 'Rob', 'age': 18}

答案 1 :(得分:0)

如果您的目标是使对象像字典一样工作,则可以将dict本身子类化,或者甚至可以更容易地将collections.UserDict子类化。

import collections

class Student(collections.UserDict):
    def __init__(self, name, age):
        self.data = {'name': name, 'age': age}

student_data = Student('Rob', 18)

print(student_data)