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() (括弧に注意してください)。

そのままでは、クラスのインスタンスではなく、クラスを変更しています-そして、クラス自体ではなく、クラスのインスタンスから文字列を作成する方法のみをpythonに伝えます...__str__

于 2013-03-08T18:53:46.297 に答える
2

クラスのインスタンスに対する__str__orを実際に使用しようとしている場合は、次のようにメタクラスを使用する必要があります。__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 の INSTANCE を作成して time1 に渡すのではなく、そのクラスの TYPE を time1 に渡します。

このコードを思いどおりに動作させるには、オブジェクト コンストラクターを呼び出すだけです。

time1 = Time()

「INSTANCE の代わりに TYPE を保持する変数が必要なのはなぜだろう?」と考えているかもしれません。Python では、クラス定義 (およびその他のほとんどすべて) は、実行時に変更できるファースト クラス オブジェクトであり、メンバーとメンバー関数をクラス定義から動的に追加/削除できます。pythoningを楽しんでください。本当に最高です。

于 2013-03-08T19:03:48.237 に答える