1

オブジェクトのリストと、1 つのオブジェクトに対して機能するメソッドを考えてみましょう。

beers = []
beers.append(Beer('Carlsberg', 'tasty'))
beers.append(Beer('Guinness', 'bitter'))
beers.append(Beer('Leffe', 'perfect'))

def howIsBeer (name):
    taste = ???
    print taste

Class Beer:
    def __init__ (self, name, taste):
        self.name = name
        self.taste = taste

ビールの名前だけが提供されている場合、メソッドはどのようにhowIsBeer()してビールの味を取得しますか? 私の最初の傾向はbeersリストを反復することですが、Python であるため、より直接的な方法があると思います。ある?

4

3 に答える 3

3

これ以上の方法は考えられません。単純にfor-loop を使用してください。

def howIsBeer(name):
    for beer in beers:
        if beer.name == name:
            return beer.taste

In [1]: howIsBeer("Carlsburg")
Out[1]: tasty

classまた、キーワードが small で書かれていることに注意してcください。インスタンスの作成に使用する前に、クラスを定義する必要もあります。

編集:コメントで提案されているように、1つの方法は、辞書を定義することです。便利な場合は、以下のコードを使用できます。ただし、これは大量の Beer オブジェクトがあり、パフォーマンス速度が本当に重要な場合にのみ推奨されることに注意てください。それ以外の場合は、提供された最初のコードを使用します

class Beer:
    names = {}
    def __init__(self, name, taste):
        Beer.names[name] = self
        self.name = name
        self.taste = taste

In [3]: Beer.names["Carlsburg"].taste
Out[3]: tasty
于 2012-12-04T12:55:12.210 に答える
3

リストをループして、それぞれを確認するだけです。

ただし、class defはクラスの使用よりも上にある必要があり、小さなc. また、認識されない場合にも注意が必要です。

あなたはカールスバーグのスペルも間違っています:/

class Beer:
    def __init__ (self, name, taste):
        self.name = name
        self.taste = taste



beers = []
beers.append(Beer('Carlsberg', 'tasty'))
beers.append(Beer('Guinness', 'bitter'))
beers.append(Beer('Lef', 'perfect'))


def howIsBeer (name):

    taste = "I have no idea"

    for beer in beers:
        if beer.name == name:
            taste = beer.taste

    print taste



howIsBeer("Carlsberg") # tasty

ただし、次のようにします(ここで辞書を使用すると、複数のプロパティを持つ柔軟性が得られます):

beers = {}
beers["Lef"] = {"taste": "tasty"}
beers["Staropramen"] = {"taste": "tasty"}
beers["Peroni"] = {"taste": "tasty"}
beers["Coors Light"] = {"taste": "What is this?!"}


def howIsBeer (name):

    taste = "I have no idea"

    if name in beers:
        taste = beers[name]["taste"]

    print taste



howIsBeer("Lef")

味だけを保存したい場合は、次のようにします。

beers = {}
beers["Lef"] = "tasty"
beers["Staropramen"] = "tasty"
beers["Peroni"] = "tasty"
beers["Coors Light"] = "What is this?!"


def howIsBeer (name):

    taste = "I have no idea"

    if name in beers:
        taste = beers[name]

    print taste



howIsBeer("Lef")

質問で述べたように、一連のオブジェクトを保存しようとしている場合は、クラスの変数である辞書ではなく、オブジェクトの辞書が必要です。

すなわち

beers = {}

def add_beer(beer):
    beers[beer.name] = beer

次に、見ているビールに関するデータを取得します。

if beer in beers:
    beers[beer].taste

これは任意のオブジェクト タイプに拡張できます。まさにあなたが探しているものだと思います。

例えば

cheeses = {}
add_cheese(cheese):
    cheeses[cheese.name] = cheese

どこ

class cheese:
    def __init__(self, name, smelliness, hardness, colour, country):
        self.name = name
        self.smelliness = smelliness
        self.hardness = hardness
        self.colour = colour
        self.country = country
于 2012-12-04T12:59:10.310 に答える