我希望标题对我来说足够清楚,老实说,我并没有做太多尝试,因为我并不真正知道该去哪里,而且我甚至不确定这是完全可能的。我知道可以覆盖__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)
预先感谢
答案 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)