我正在深入研究一些面向对象的编程。不幸的是,我甚至无法迈出第一步。使用 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'>
我做错了什么?
任何帮助将不胜感激!
答案 0 :(得分:8)
您需要Time
的实例。例如time1 = Time()
(注意括号)。
实际上,您正在修改类,而不是类的实例 - 而__str__
只告诉python如何从实例创建字符串班级,而不是班级本身...
答案 1 :(得分: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
但是,正如其他人所说,你更有可能不是通过调用__init__
来指代时间实例
答案 2 :(得分:1)
你的问题在这里:
time1 = Time
您没有创建类Time的INSTANCE并将其传递给time1,而是将该类的TYPE传递给time1。
要使此代码按您的意愿工作,只需调用对象构造函数:
time1 = Time()
您可能会想“为什么有人需要变量来保存TYPE而不是INSTANCE?”好吧,在Python中,类定义(以及几乎所有其他)是可以在运行时修改的第一类对象,允许从类定义中动态添加/删除成员和成员函数。玩得开心 pythoning ,这真是个爆炸。