Par exemple, comment puis-je utiliser au hasard l'une des quatre fonctions (au sein de la classe) répertoriées ci-dessous?
import random
class Calculate():
def HI_1(x, y):
return x + y
def HI_2(x, y):
return x - y
def HI_3(x, y):
return x * y
def HI_4(x, y):
return x/y
a = random.randint(1, 4)
b = 'HI_' + str(a)
p = Calculate.b(15, 7)
print(p)
Ma tentative de le faire est venue avec une erreur. Pourquoi ai-je eu cette erreur et comment faire?
3 réponses
Vous pouvez utiliser getattr()
, en plus vos méthodes doivent être déclaré comme staticmethod
:
import random
class Calculate():
@staticmethod
def HI_1(x, y):
return x + y
@staticmethod
def HI_2(x, y):
return x - y
@staticmethod
def HI_3(x, y):
return x * y
@staticmethod
def HI_4(x, y):
return x/y
a = random.randint(1, 4)
b = 'HI_' + str(a)
p = getattr(Calculate, b)(15, 7)
print(b, p)
Tout d'abord, vos méthodes doivent être statiques ou avoir self
comme premier argument. Une fois cela corrigé, vous pouvez utiliser random.choice
à la place pour choisir la méthode dans une liste. Cela a l'avantage de ne pas dépendre des noms des méthodes.
import random
class Calculate:
@staticmethod
def add(x, y):
return x + y
@staticmethod
def sub(x, y):
return x - y
@staticmethod
def mult(x, y):
return x * y
@staticmethod
def div(x, y):
return x/y
@classmethod
def random_op(cls, x, y):
return random.choice([
cls.add,
cls.sub,
cls.mult,
cls.div
])(x, y)
B est toujours une chaîne. Vous devez l'évaluer en une expression:
a = random.randint(1, 4)
b = 'HI_' + str(a)
func = eval("Calculate.{}".format(b))
func(15, 7)
Notez que vous ne devez pas utiliser eval()
sur une chaîne qui est une entrée utilisateur car cela peut entraîner des failles de sécurité.
Questions connexes
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.