-2

これが私のハハクラスです

class  haha(object):
  def  theprint(self):
    print "i am here"

>>> haha().theprint()
i am here
>>> haha(object).theprint()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object.__new__() takes no parameters

なぜhaha(object).theprint()間違った出力を取得するのですか?

4

3 に答える 3

0

継承とインスタンス化時にクラスを初期化することを混同しています。

この場合、クラス宣言については、次のことを行う必要があります。

class  haha(object):
    def  theprint(self):
        print "i am here"

>>> haha().theprint()
i am here

haha(object)は、hahaがオブジェクトから継承することを意味するためです。Pythonでは、すべてのクラスがデフォルトでオブジェクトから継承するため、これを記述する必要はありません。

パラメータを受け取るinitメソッドがある場合、たとえば、インスタンス化するときにそれらの引数を渡す必要があります。

class  haha():
    def __init__(self, name):
        self.name=name
    def theprint(self):
        print 'hi %s i am here' % self.name

>>> haha('iferminm').theprint()
hi iferminm i am here
于 2012-12-31T18:39:40.083 に答える
0

class haha(object):hahaから継承することを意味しobjectます。から継承するということは、object基本的に新しいスタイルのクラスであることを意味します。

を呼び出すとhaha()、 の新しいインスタンスが作成されるため、 という名前のメソッドであるコンストラクターhahaが呼び出されます。ただし、パラメーターがないため、パラメーターを受け入れないデフォルトのコンストラクターが使用されます。__init__

于 2012-12-31T15:16:11.793 に答える
0

このわずかな変化の例は、haha何が起こっているのかを理解するのに役立ちます。__init__いつ呼び出されるかを確認できるように実装しました。

>>> class haha(object):
...   def __init__(self, arg=None):
...     print '__init__ called on a new haha with argument %r' % (arg,)
...   def theprint(self):
...     print "i am here"
... 
>>> haha().theprint()
__init__ called on a new haha with argument None
i am here
>>> haha(object).theprint()
__init__ called on a new haha with argument <type 'object'>
i am here

ご覧のとおり、はパラメータとして にhaha(object)渡されます。を実装していなかったため、デフォルトではパラメーターを受け入れないため、エラーが発生していました。ご覧のとおり、それを行うことはあまり意味がありません。object__init____init____init__

于 2012-12-31T18:35:34.947 に答える