2017-05-23 15 views
0

私のenumにメソッドを追加したいと思います。enumにメソッドを追加するには?

class Kerneltype(Enum): 
    tube = 0 
    subspace_KDE = 1 
    deltashift = 2 
    dist_sens_via_mass_1 = 3 

    def aslist(self): 
     return [self.tube, self.subspace_KDE, self.deltashift, self.dist_sens_via_mass_1] 

    def fromint(self, int): 
     return self.aslist()[int] 

は機能しません。代わりに

Kerneltype.aslist() 

の私は現在、あなたはクラスではなく列挙型のメンバーからそれらを呼び出しているよう classmethodデコレータを使用してメソッドを定義する必要があります

[kt[1] for kt in ob.Kerneltype.__members__.items()] 
+4

は "動作しないことは" 非常に_vague_問題の説明です。より具体的に、あなたに表示されているエラーメッセージをお知らせください。 – ForceBru

+4

注意: 'aslist'メソッドは、' list(Kerneltype) 'が自動的にあなたに与えないものは何もしません。 –

+1

ここではドキュメントが非常に役立ちます。 [列挙型を反復する]メソッド(https://docs.python.org/3/library/enum.html#iteration)は必要ありません。また、整数インデックスを使用して[関数](https://docs.python.org/3/library/enum.html#programmatic-access-to-enumeration-members-and-their-attributes)。 – Ben

答えて

2

を行う必要があります。

@classmethod 
def aslist(cls): 
    return [cls.tube, cls.subspace_KDE, cls.deltashift, cls.dist_sens_via_mass_1] 

@classmethod 
def fromint(cls, int): 
    return cls.aslist()[int] 


他人がコメントで述べたように、あなたのaslist()方法が必要とされていない、あなたが直接、デフォルトでlist() on itとそれを使用することができます定義の順序を保持します。違いはエイリアスを返さないことだけです。

>>> list(Kerneltype) 
[<Kerneltype.tube: 0>, <Kerneltype.subspace_KDE: 1>, <Kerneltype.deltashift: 2>, <Kerneltype.dist_sens_via_mass_1: 3>] 
+0

すべてのメンバーはEnumクラスのインスタンスであり、インスタンスメソッドは理にかなっています(この例ではありません)。 –

+0

@EthanFurman私はユースケースを知りたいです。 –

+1

十分ですが、ここに例があります:[Python Enum、いつ、どこで使うのですか?](https://stackoverflow.com/a/22594360/208880) –

2

、インスタンスメソッドを作成するので、aslistKerneltypeのみ(即ち自身列挙メンバー)のインスタンス上に存在します。あなたが代わりにa classmethodが必要になります。

@classmethod 
def aslist(cls): 
    return [cls.tube, cls.subspace_KDE, cls.deltashift, cls.dist_sens_via_mass_1] 
>>> Kerneltype.aslist() 
[<Kerneltype.tube: 0>, <Kerneltype.subspace_KDE: 1>, <Kerneltype.deltashift: 2>, <Kerneltype.dist_sens_via_mass_1: 3>] 
1

あなたはclassmethodデコレータを逃した:

@classmethod 
def aslist(self): 
    return [self.tube, self.subspace_KDE, self.deltashift, self.dist_sens_via_mass_1] 
関連する問題