Как назначить операцию, такую ​​как сумма или замена и т. Д., Переменной - PullRequest
2 голосов
/ 24 апреля 2011

Я хочу сделать что-то вроде

class A:
    def __init__( self, left, right, op ):
        self.left = left
        self.right = right
        self.op = op
    def calculate( self ):
        self.number = op( self.left, self.right )
        return self.number

и использовать его, например, так:

a = A( 1, 2, + )
a2 = A( 2, 3, * )

Я пытался сделать

op = +
op = __add__

но ничего из этого не сработало.Может кто-нибудь сказать, возможно ли это (и если да, то как это называется, потому что я даже не знаю, как его искать).Или единственный возможный способ состоит в том, чтобы иметь большой, уродливый оператор if-else в calculate и проверить значение op, которое будет сохранено как str?

Спасибо!

Ответы [ 2 ]

9 голосов
/ 24 апреля 2011

См. Модуль operator.

a = A( 1, 2, operator.add )
5 голосов
/ 24 апреля 2011

Другой способ сделать это - указать лямбда-функцию в качестве третьего параметра:

a = A( 1, 2, lambda x,y: x + y)
b = A( 1, 2, lambda x,y: x * y)

Это позволит вам поддерживать более сложные операции, отсутствующие в модуле operator.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...