Python 从对象中的属性获取随机元素
我有一个对象,它有16个双属性,我想随机选取其中一个,所以我创建了一个方法,创建了一个0-15之间的随机数,但这个方法不是我想要的,我认为如果你们有另一个最干净的方法,这是一个非常肮脏的方法Python 从对象中的属性获取随机元素,python,object,random,attributes,Python,Object,Random,Attributes,我有一个对象,它有16个双属性,我想随机选取其中一个,所以我创建了一个方法,创建了一个0-15之间的随机数,但这个方法不是我想要的,我认为如果你们有另一个最干净的方法,这是一个非常肮脏的方法 class Currencies(object): EURToUSD = 0.0 EURToJPY = 0.0 EURToBTC = 0.0 USDToEUR = 0.0 USDToBTC = 0.0 USDToJPY = 0.0 BTCToEUR =
class Currencies(object):
EURToUSD = 0.0
EURToJPY = 0.0
EURToBTC = 0.0
USDToEUR = 0.0
USDToBTC = 0.0
USDToJPY = 0.0
BTCToEUR = 0.0
BTCToJPY = 0.0
BTCToUSD = 0.0
JPYToEUR = 0.0
JPYToUSD = 0.0
JPYToBTC = 0.0
EURToEUR = 0.0
JPYToJPY = 0.0
USDToUSD = 0.0
BTCToBTC = 0.0
def __init__ (self):
try:
rates = urllib2.urlopen("http://fx.priceonomics.com/v1/rates/")
except urllib2.URLError as e:
return e.reasonx
res = json.load(rates)
self.EURToEUR = 1.000000
self.USDToUSD = 1.000000
self.JPYToJPY = 1.000000
self.BTCToBTC = 1.000000
self.EURToUSD = res['EUR_USD']
self.EURToJPY = res['EUR_JPY']
self.EURToBTC = res['EUR_BTC']
self.USDToEUR = res['USD_EUR']
self.USDToBTC = res['USD_BTC']
self.USDToJPY = res['USD_JPY']
self.BTCToEUR = res['BTC_EUR']
self.BTCToJPY = res['BTC_JPY']
self.BTCToUSD = res['BTC_USD']
self.JPYToEUR = res['JPY_EUR']
self.JPYToUSD = res['JPY_USD']
self.JPYToBTC = res['JPY_BTC']
def getRandomRate():
randomNumber = randint(0,15)
if(randomNumber == 1):
return EURToUSD = 0.0
if(...)
您可以从中选择一个随机属性,过滤与模式匹配的名称:
def getRandomRate(self):
return random.choice([v for attr, v in vars(self).items()
if len(attr) == 8 and attr[3:5] == 'To'])
从所有属性中选取一个随机值,其名称为8个字符长,中间包含“代码> > 。 使用您的类的简短演示:
>>> import random
>>> c = Currencies()
>>> vars(c)
{'EURToBTC': u'0.0108027', 'BTCToJPY': u'12816.8350063', 'JPYToJPY': 1.0, 'USDToBTC': u'0.0094131', 'JPYToBTC': u'0.0000702', 'BTCToUSD': u'125.2057142', 'USDToUSD': 1.0, 'USDToJPY': u'116.1736146', 'EURToEUR': 1.0, 'JPYToUSD': u'0.0084464', 'BTCToEUR': u'92.3549138', 'USDToEUR': u'0.8820255', 'BTCToBTC': 1.0, 'JPYToEUR': u'0.0065705', 'EURToUSD': u'1.2338648', 'EURToJPY': u'126.4193644'}
>>> [v for attr, v in vars(c).items() if len(attr) == 8 and attr[3:5] == 'To']
[u'0.0108027', u'12816.8350063', 1.0, u'0.0094131', u'0.0000702', u'125.2057142', 1.0, u'116.1736146', 1.0, u'0.0084464', u'92.3549138', u'0.8820255', 1.0, u'0.0065705', u'1.2338648', u'126.4193644']
>>> random.choice([v for attr, v in vars(c).items() if len(attr) == 8 and attr[3:5] == 'To'])
u'0.0108027'
因此,列表理解为每个转换率提取了16个值,然后
random.choice()
随机选择其中一个;如果能看到一些代码就好了。但是,无论如何,你可以构建一个属性列表或元组,并将其传递给<代码>随机。Couice()/Case>。如果你能解释一下的话more@mel:vars()
为您提供了一个属性字典;包括'eurtour'
,'eurtusd'
等。键是属性名称、值和属性值。代码选择所有这些值,然后随机选择其中一个。谢谢,但是如果len(attr)==8和attr[3:5]='To']@mel:这是在测试字符串长度('eurtour'
是8个字符),如果该字符串的中间2个字符是'To'
,该怎么办。