5

ご挨拶。
長い間検索しましたが、答えのない関連する質問がたくさん見つかりました。それにもかかわらず、私は単純な初心者の疑いのようです。

(私が推測する) 典型的なクラス定義があります。

class Town:
    def __init__(self, Name, Ruler = "Spanish Inquisition"):
        self.Name = Name
        self.Population = 0
        self.LocationX = 0
        self.LocationY = 0
        self.Religion = "Jedi"
        self.Ruler = Ruler
        self.Products = ["Redstone", "Azaleas"]

あなたはアイデアを得る。多くの属性。私はそれらすべてが必要です。

問題は次のとおりです: **これらすべての「自己」を保存するための近道はありますか?** 私は怠惰すぎますか? 私は次のようなことを望んでいました:

with self:
    Name = Name
    Population = 0
    ...

もちろん、これは機能しないことを知っています(これは「with」の使用ではなく、引数が間違った名前空間にあります...私はそれを正しく理解しましたか?)。

同じ結果を達成するための代替手段はたくさんあると思いますが、私は Python クラスの力に本当に興味があります.

(関連する質問:クラス属性、コンストラクター引数、およびサブクラス コンストラクターのデフォルトを整理する最も「pythonic」な方法は? )

4

3 に答える 3

5

あなたは友達を作ることはできませんが、一つの方法....:

class Town2:
    def __init__(self, name, ruler = 'Spider Pig'):
        self.__dict__.update(dict(
            Name = name,
            Population = 0,
            LocationX = 0,
            LocationY = 0,
            Religion = "Jedi",
            Ruler = ruler,
            Products = ["Redstone", "Azaleas"]))
于 2013-04-22T21:18:52.370 に答える
3

selfDRY に合わせながら、過剰な , 入力をすべて回避する方法の 1 つを次に示します。

class Town(object):
    def __init__(self, name, data={}):
        setattr(self, 'name', name)
        for k,v in data.iteritems():
            setattr(self, k, v)


default_town_info = {
    'population': 0,
    'location_x': 0,
    'location_y': 0
    }

a = Town('foo', default_town_info)
print a.name
print a.population
print a.location_x

これにより、引き続き属性にアクセスでき、以下が返されます。

foo
0
0

はい、2つの自己使用がありますが、必要な属性が提供されることを保証する辞書を常に渡すと、「名前」などを減らすことができます。

于 2013-04-22T21:33:36.613 に答える