4

私はプログラミングに非常に慣れていないので、自分自身を教えようとしています。私は現在、クラスからオブジェクトを構築する方法を学ぼうとしていますが、それは理解していると思います。私の現在のタスクは、オブジェクトをリストに追加し、そのリストを印刷することです。最終的に、オブジェクトを作成し、作成された各オブジェクトを番号付きリストにリストするプログラムを構築しようとしています。

1 - tomato, red
2 - corn, yellow
etc...

まず、この基本的な部分を構築しようとしています。これが私が作ったものです:

# Builds objects on instantiation for a vegetable and color
class Veg:
    def __init__(self, name, color):
        self.name = name
        self.color = color
        print('You have created a new', self.color, self.name, end='.\n')

# Function to create a new vegetable and store it in a list
def createVeg():
    name = input('What is the name of the Vegetable? ')
    color = input('What color is the vegetable? ')
    Veg(name, color)
    vegList.append(Veg)
    return

# Initialize variables
vegList = []
choice = 'y'

# Main loop
while choice == 'y':
    print('Your basket contains:\n', vegList)
    choice = input('Would you like to add a new vegetable? (y / n) ')
    if choice == 'y':
        createVeg()
    if choice == 'n':
        break

print('Goodbye!')

これを実行すると、次のようになります。

Your basket contains:
 []
Would you like to add a new vegetable? (y / n) y
What is the name of the Vegetable? tomato
What color is the vegetable? red
You have created a new red tomato.
Your basket contains:
 [<class '__main__.Veg'>]
Would you like to add a new vegetable? (y / n) y
What is the name of the Vegetable? corn
What color is the vegetable? yellow
You have created a new yellow corn.
Your basket contains:
 [<class '__main__.Veg'>, <class '__main__.Veg'>]
Would you like to add a new vegetable? (y / n) n
Goodbye!

したがって、私が知る限り、リストの印刷を除いてすべてが機能しますが、これはわかりません。リストプロパティを追加しているようですが、オブジェクトは表示されていません。「for」ループも試しましたが、同じ結果が得られました。

4

3 に答える 3

6

すべてが設計どおりに機能しています。<class '__main__.Veg'>文字列は、クラス インスタンスの表現です。Veg

__repr__クラスにメソッドを与えることで、その表現をカスタマイズできます。

class Veg:
    # ....

    def __repr__(self):
        return 'Veg({!r}, {!r})'.format(self.name, self.color)

関数がしなければならないことは、__repr__適切な文字列を返すことだけです。

上記の__repr__関数の例では、リストは次のようになります。

[Veg('tomato', 'red'), Veg('corn', 'yellow')]

新しいインスタンスを実際に追加していることを確認する必要があります。それ以外の:

Veg(name, color)
vegList.append(Veg)

これを行う:

newveg = Veg(name, color)
vegList.append(newveg)
于 2013-03-14T14:40:34.943 に答える