7

我正在研究一些面向对象的编程。不幸的是,我什至无法迈出第一步。使用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

3 回答 3

9

你需要一个. Time例如time1 = Time() (注意括号)。

实际上,您正在修改,而不是类的实例——并且__str__只告诉 python 如何从类的实例创建字符串,而不是类本身......

于 2013-03-08T18:53:46.297 回答
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__

于 2013-03-08T19:11:45.727 回答
1

你的问题在这里:

time1 = Time

您没有创建 Time 类的实例并将其传递给 time1,而是将该类的 TYPE 传递给 time1。

要使此代码按您的意愿工作,只需调用对象构造函数:

time1 = Time()

你可能会想“为什么有人需要一个变量来保存一个类型而不是一个实例?” 好吧,在 Python 中,类定义(以及几乎所有其他东西)是可以在运行时修改的第一类对象,允许从类定义中动态添加/删除成员和成员函数。玩得开心蟒蛇,这真的是一个爆炸。

于 2013-03-08T19:03:48.237 回答