Каким-то образом у вас неправильный синтаксис. Вы создаете словарь с class
-инстанциями как клавишами и strings
как значениями .
Если вы хотите вызывать функции / классы случайным образом, вы должны назначить имя переменной для каждой функции, рандомизировать порядок этих имен и вызвать возвращаемую функцию, применив к ней ().
Если вы хотите использовать классы или функции в качестве значений вашего dict, это не имеет большого значения - для классов вы также должны каким-то образом хранить, какой метод вызывать (или просто печатать класс и кодировать рабочий str () за это).
Мой пример использует функции напрямую:
def a():
print "a"
def b():
print "b"
def c():
print "c"
def d():
print "d"
def e():
print "e"
import random
# you would have to incoporate this somewhere into your program logic.
# probably calling it from Rules() - somehow.
def menu():
# map functions to keys
# "a" is a string, the name for a function
# a is the function
# a() calls the function, as does options["a"]()
options = { "a" : a, "b" : b, "c" : c, "d" : d, "e" : e}
# get all possible names
listOfKeys = list(options.keys())
# shuffle in place into random order
random.shuffle(listOfKeys)
# visit them in this order
for r in listOfKeys:
options[r]() # get function-value from the dict and () it
print "First try:"
menu()
print "\n\nSecond try:"
menu()
Выход:
First try:
e
c
d
a
b
Second try:
b
c
a
e
d
Ссылка на документ для random.shuffle ()
Почему использование классов здесь принесет пользу вашему коду, мне неясно ...