Если вы можете выразить все свои функции в виде одной строки, используйте lambda
s, как предложено в ответе @ bphi .
Если вы не хотите, чтобы вас ограничивали с помощью лямбда-исчисления, другой способ - использовать класс и его статические методы. Статические методы - это методы класса, а не экземпляра класса, поэтому они не имеют доступа к внутреннему состоянию объекта и могут вызываться для класса, а не для экземпляра.
Однако, прочитав этот ответ, вы можете понять, почему это не очень элегантный (или рекомендуемый) подход, даже если результат именно такой, как вы просили.
class MyClass:
@staticmethod # this decorator is optional here, but suggested for code clarity
def func():
print("Hello, world!")
def func2():
print("Hey there, I am another function.")
MyClass.func()
>>> 'Hello, world!'
MyClass.func()
>>> 'Hey there, I am another function.'
Если вы хотите использовать синтаксис словарей, предложенный в вашем вопросе, вы можете использовать __dict__
в классе:
MyDict = dict(MyClass.__dict__)
MyDict["func"]()
>>> 'Hello, world!'
MyDict["func2"]()
>>> 'Hey there, I am another function.'
И вы также можете добавить другие функции в этот словарь:
MyDict["func3"] = lambda: print("Hi, I am yet another function.")
def func4:
print("And I am the last function for today.")
MyDict["func4"] = func4
MyDict["func"]()
>>> 'Hi, I am yet another function.'
MyDict["func2"]()
>>> 'And I am the last function for today.'
Но так как этот словарь является просто представлением класса MyClass
, он также содержит некоторые элементы, связанные с этим классом, например __weakref__
. Но вы можете извлечь свои собственные функции:
MyCleanDict = {}
for key, value in MyDict:
if not key.startswith("_"):
MyCleanDict[key] = value
Результат - именно то, о чем вы просили, но я сомневаюсь, что сложность подхода стоит результата. Я рекомендую а) использовать lambda
-функции, б) придерживаться вашего первого подхода (сначала определить функции, а затем поместить их в dict
) или в) переосмыслить реальную проблему, так как вы можете найти другое решение помимо сохранения функций в словарь.