3

「コア python プログラミング 第 2 版」から python を学んでいます

「クラスインスタンスの作成方法」の部分で立ち往生しています。84ページ。

例は次のとおりです。

クラス.py:

class FooClass(object):

    """my very first class: FooClass"""

    version = 0.1 # class (data) attribute



def __init__(self, nm='John Doe'):

    """constructor"""

    self.name = nm # class instance (data) attribute

    print'Created a class instance for', nm



def showname(self):

    """display instance attribute and class name"""

    print 'Your name is', self.name

    print 'My name is', self.__class__.__name__



def showver(self):

    """display class(static) attribute"""

    print self.version # references FooClass.version



def addMe2Me(self, x): # does not use 'self'

    """apply + operation to argument"""

    return x + x

次に、クラス インスタンスを作成する必要があります。

私のインタープリターでは、次のことを行います。

Import classes *
fool = FooClass()

しかし、何も起こりません。initを出力する必要があります。

私が使うときも

fool.showname()そして、fool.showverそれは何も印刷しません。それは言う

FooClass' オブジェクトには属性「showver」がありません

先に進む前に、ここで何が起こっているのか知りたいです。うまくいけば、誰かが私を助けることができます!

前もって感謝します!:)

4

3 に答える 3

4

クラスのメソッドをインデントしていないようです。次のコードを使用します。

class FooClass(object):
    ...

def __init__(self, nm='John Doe'):
    ...

FooClassというクラスと という関数を宣言しています__init__。クラスにはデフォルトの空のコンストラクターがあります。代わりに次のようにインデントする場合:

class FooClass(object):
    ...
    def __init__(self, nm='John Doe'):
        ...

メソッドをコンストラクターとして持つクラスFooClassがあります。__init__

于 2013-03-01T11:43:49.167 に答える
3

さて、私もPythonを学んでいて、この本も参照していますが、私の本は初版です。しかし、私があなたのコードから分析したのは、それが適切にインデントされていないということです。適切にチェックして、うまくいくことを願っています。ありがとう。

于 2013-03-01T11:50:35.103 に答える
2

インデントに問題があるようです。Pythonが関数、条件、ループのコードを「内部」として扱うためにインデントする必要があるのと同じように、さまざまなクラスメソッドは、単なる(個別の)関数ではなく、行を超えてインデントする必要がありますclass ...:。たまたまその後に定義されます。それで、

class FooClass(object):

    """my very first class: FooClass"""

    version = 0.1 # class (data) attribute



    def __init__(self, nm='John Doe'):

        """constructor"""

        self.name = nm # class instance (data) attribute

        print'Created a class instance for', nm

残りのメソッドについても同様です。

于 2013-03-01T11:43:34.993 に答える