0

人の名前と番号を格納するクラスを作成しようとしています。

class Contact(object)
    def __init__(self, name, number)
        self._name = name
        self._number = number

    def getNumber(self):
        return self._number

    def setNumber(self, newNumber):
        self._number = newNumber

    def numberUpdate(self):
        newNumber = number
        self.setNumber(newNumber)

    def action(self):

        person = Contact("Jonathan")

        number = input("What's your number: ")
        person.numberUpdate()

person = Contact()
Contact.action(person)

希望どおりに番号の入力を求められます。しかし、番号を入力した後も、次のエラーが発生し続けます。

NameError: global name 'number' is not defined

ここで私が間違ったことを誰かに教えてもらえますか?私は試した:

 def numberUpdate(self, number):
    newNumber = number
    self.setNumber(newNumber)

def action(self):

    person = Contact("Jonathan")

    number = input("What's your number: ")
    person.numberUpdate(number)

そしてそれは私に与えます:

TypeError: numberUpdate() takes exactly 2 arguments (1 given)

どんな助けでもいただければ幸いです。ありがとうございました。

4

1 に答える 1

0

一般的な提案

Contactクラスの設計は、かなりの数の方法で壊れています(たとえば、action()メソッドは、Contactクラス内で新しいContactオブジェクトをインスタンス化するべきではありません)。

Contactクラスは、1つの名前とその名前の番号を格納することを目的としているようです。メソッド内で特定の名前を指定するのでaction()はなく、代わりにクラスが誰かの名前を格納できるようにする必要があります。__init__メソッド内、またはsetterメソッドを使用して名前の格納を処理します。

また、実際にはaction()メソッドの名前を変更する必要があります。この名前は、結果がどうなるかについてのヒントを与えるものではありません。メソッドを呼び出す際の構文action()も間違っています。

包括的な問題

基本的に、オブジェクト指向プログラミングの基本のいくつかを理解していないため、問題が発生しています。各エラーに苦労するのではなく、時間をかけてオブジェクトとクラスがどのように機能するかを確認することをお勧めします。

于 2012-05-08T15:40:47.780 に答える