Kemungkinan Duplikat:
Bagaimana saya bisa mewakili 'enum' dengan Python?
Apa praktik umum untuk enum dengan Python? Yaitu. bagaimana mereka direplikasi dengan Python?
public enum Materials
{
Shaded,
Shiny,
Transparent,
Matte
}
Kemungkinan Duplikat:
Bagaimana saya bisa mewakili 'enum' dengan Python?
Apa praktik umum untuk enum dengan Python? Yaitu. bagaimana mereka direplikasi dengan Python?
public enum Materials
{
Shaded,
Shiny,
Transparent,
Matte
}
Saya telah melihat pola ini beberapa kali:
>>> class Enumeration(object):
def __init__(self, names): # or *names, with no .split()
for number, name in enumerate(names.split()):
setattr(self, name, number)
>>> foo = Enumeration("bar baz quux")
>>> foo.quux
2
Anda juga dapat menggunakan anggota kelas saja, meskipun Anda harus memberikan penomoran Anda sendiri:
>>> class Foo(object):
bar = 0
baz = 1
quux = 2
>>> Foo.quux
2
Jika Anda mencari sesuatu yang lebih kuat (nilai renggang, pengecualian khusus enum, dll.), coba ini resep.
Saya tidak tahu mengapa Enum tidak didukung secara asli oleh Python. Cara terbaik yang saya temukan untuk menirunya adalah dengan mengganti _ str _ dan _ eq _ sehingga Anda dapat membandingkannya dan saat Anda menggunakan print() Anda mendapatkan string alih-alih nilai numerik.
class enumSeason():
Spring = 0
Summer = 1
Fall = 2
Winter = 3
def __init__(self, Type):
self.value = Type
def __str__(self):
if self.value == enumSeason.Spring:
return 'Spring'
if self.value == enumSeason.Summer:
return 'Summer'
if self.value == enumSeason.Fall:
return 'Fall'
if self.value == enumSeason.Winter:
return 'Winter'
def __eq__(self,y):
return self.value==y.value
Penggunaan:
>>> s = enumSeason(enumSeason.Spring)
>>> print(s)
Spring
Anda mungkin bisa menggunakan struktur warisan meskipun semakin sering saya memainkannya, saya merasa semakin kotor.
class AnimalEnum:
@classmethod
def verify(cls, other):
return issubclass(other.__class__, cls)
class Dog(AnimalEnum):
pass
def do_something(thing_that_should_be_an_enum):
if not AnimalEnum.verify(thing_that_should_be_an_enum):
raise OhGodWhy
_unused, Shaded, Shiny, Transparent, Matte = range(5)
- person zekel; 09.12.2010
Shaded, Shiny, Transparent, Matte = range(1, 5)
jika Anda tidak suka ada _unused
di sana
- person Davy8; 30.01.2011
Materials.shinny
di log daripada 1
karena 1
memberi tahu saya lebih sedikit daripada Materials.shinny
- person Gewthen; 17.10.2015
enums
menggunakan Python pada 3.4
- person SudoKid; 04.01.2017