ここで本当に簡単な質問です。ベンが作成された後、名前を呼び出すためにベン[0]を呼び出し、年齢を呼び出すためにベン[1]を呼び出すことができますか?
これらの属性にリストとしてアクセスする方法があるかどうか疑問に思っています。
class People():
def __init__(self, name, age):
ben=People("ben", "10")
ここで本当に簡単な質問です。ベンが作成された後、名前を呼び出すためにベン[0]を呼び出し、年齢を呼び出すためにベン[1]を呼び出すことができますか?
これらの属性にリストとしてアクセスする方法があるかどうか疑問に思っています。
class People():
def __init__(self, name, age):
ben=People("ben", "10")
クラスの属性には固有の順序がないため、クラスでやりたいことは不可能です。それらは dict に格納されているため、 to の代わりににマップben[0]
するben.name
合理的な方法はありませんben.age
。
ただし、いくつかの異なる方法でクラスを変更して、妥当なものにすることができます。
__getitem__
だけの呼び出しgetattr(self, self._fields[index])
。OrderedDict
この場合、それらを割り当てる__init__
順序がそれらの順序になります。だからそれはただself.__dict__.values()[index]
です。__slots__
属性の辞書の代わりに使用します。のソースをcollections.namedtuple
見ると、これらの組み合わせを使用していることがわかります。_fields
フィールド名を格納するという名前のクラス属性があり、フィールド値は継承元のタプルに格納され、次に として定義__dict__
されます。@property
それはそれらをその場でまとめOrderedDict
ます。これはおそらく、必要以上に巧妙です。そして、これほど賢くする必要がある場合は、最初から a を使用するか、a から継承してくださいnamedtuple
。