如何使用“__str__”方法?
我正在学习面向对象编程。不过,我连第一步都搞不定:使用 __str__
把类转换成字符串。
这是我的代码:
class Time:
def __init__(self, hours = 0, minutes = 0, seconds = 0):
self.hours = hours
self.minutes = minutes
self.seconds = seconds
def __str__(self):
return "basdfadsg"
time1 = Time
time1.hours = 3
time1.minutes = 23
time1.seconds = 13
print(time1)
每次我尝试:
print(time1)
它返回:
<class '__main__.Time'>
我哪里出错了?
4 个回答
1
你的问题在这里:
time1 = Time
你没有创建一个时间类(Time)的实例并把它传给time1,而是把这个类的类型传给了time1。
要让这段代码按你想要的方式工作,只需要调用对象构造函数:
time1 = Time()
你可能会想:“为什么会有人需要一个变量来保存类型而不是实例呢?”其实在Python中,类的定义(以及几乎所有其他东西)都是一等对象,可以在运行时被修改,这样就可以动态地添加或移除类定义中的成员和成员函数。好好享受编程的乐趣吧,真的很有意思。
2
如果你真的想为一个类和这个类的实例分别定义 __str__
或 __repr__
方法,你需要用元类来实现,像这样:
>>> class Test(type):
... def __repr__(self):
... return 'Test is my name'
...
>>> class MT(object):
... __metaclass__=Test
...
>>> print MT
Test is my name
不过,正如其他人所说的,你更可能是没有正确地引用 Time 的实例,而是在调用 __init__
方法。
11
你需要一个 实例,也就是要创建一个 Time
的对象。例如,你可以这样写 time1 = Time()
(注意后面的括号)。
现在你做的其实是在修改这个 类,而不是这个类的 实例。而 __str__
只是告诉 Python 如何从类的实例创建字符串,而不是从类本身创建字符串……