yılında int Kodundönüştürme enum bir enum Uyruk sahip piton
tarafından yapıldıysa, ancak sahip değilim ve bu şekilde python için çok büyük görünüyor. Eminim ki daha basit bir şey var.
yılında int Kodundönüştürme enum bir enum Uyruk sahip piton
tarafından yapıldıysa, ancak sahip değilim ve bu şekilde python için çok büyük görünüyor. Eminim ki daha basit bir şey var.
İstediğiniz şeyi yapmanın daha iyi (ve daha çok "pythonik") yolları vardır.
code_lookup = ('PL', 'DE', 'FR')
return lookup.index('PL')
Veya çizgisinde bir sözlük kullanmak:
code_lookup = {'PL':0, 'FR':2, 'DE':3}
return code_lookup['PL']
The sırası korunacaktır
Ya (Bu modifiye gerekiyorsa veya listeyi) bir demet kullanın Benim düşünceme göre, daha okunaklı ve açık olarak tercih edilir.
overkill muhtemelen olsa birnamedtuple
da, özel durumlarda yararlı olabilir
:
PL, FR, DE = range(3)
bir sınıfta sarın ve viyola: Ben böyle bir şey gördük
import collections
Nationalities = collections.namedtuple('Nationalities',
['Poland', 'France', 'Germany'])
nat = Nationalities('PL', 'FR', 'DE')
print nat.Poland
print nat.index(nat.Germany)
milliyet isimlerini kaçırıyorsun. Onları – user278618
@ user278618 olmalı - Kısırlık için onları dışarıda bıraktım. Fikir, "Milliyet" sınıfınızda bir yerde bir arama tablosu kullanmanız gerektiğiydi. Sınıf özniteliklerinizi yerine dizeleri yerine kolayca kullanabilirsiniz. –
Yapamazsınız. Python sınıf öğelerinin sırasını saklamaz ve dir()
bunları herhangi bir sırayla döndürür. Gerçekten tamsayılar dizelerden bir eşleme gerektiren yapmak senin yorumun görünce
, sen aslında tam olarak bunu yapmalıdır:
code_lookup = {
'PL': ("Poland", 0),
'DE': ("Germany", 1),
'FR': ("France", 2),
...
}
Bu enum'i kullanarak, farklı css ve dil içeren birkaç sitede bulunan ve yalnızca özellik değerinin her bir sitede aynı olduğu bir değer değeri ayarlamak için kullanıyorum. Bu seçimden milliyeti seçmeliyim ve seçeneklerin değerleri 0,1,2'dir. Bu dökümünü C# olarak kullanıyorum, bu yüzden bu fikri aldım. – user278618
Neden sadece yerine dizeleri numaraları gibi değerleri tanımlamaz: iki harfli isimleri erişmek gerekirse
class Nationality:
POLAND = 0
GERMANY = 1
FRANCE = 2
, onları eşleştiren bir tablo sağlayabilir. (Ya da diğer yolu eşleyen bir sözlük, vb.)
, numaralandırma için bir ad alanınız var.Kullanılması
ya oluşturabileceğiniz enum34
backport veya aenum bir Enum
uzman:
# using enum34
from enum import Enum
class Nationality(Enum):
PL = 0, 'Poland'
DE = 1, 'Germany'
FR = 2, 'France'
def __new__(cls, value, name):
member = object.__new__(cls)
member._value_ = value
member.fullname = name
return member
def __int__(self):
return self.value
ve kullanımda
: Yukarıdaki daha kolay yazılır>>> print(Nationality.PL)
Nationality.PL
>>> print(int(Nationality.PL))
0
>>> print(Nationality.PL.fullname)
'Poland'
aenum
kullanarak :
# using aenum
from aenum import Enum, MultiValue
class Nationality(Enum):
_init_ = 'value fullname'
_settings_ = MultiValue
PL = 0, 'Poland'
DE = 1, 'Germany'
FR = 2, 'France'
def __int__(self):
return self.value
:
>>> Nationality('Poland')
<Nationality.PL: 0>
Açıklama: Ben Python stdlib Enum
yazarı enum34
backport ve Advanced Enumeration (aenum
) kütüphane duyuyorum.
Harika çalışıyor. Çok teşekkürler! –
Bir sınıf bir numara değildir. Bunun için kıyaslayamazsın. –