Допустим есть ситуация когда у вас есть метом класса, который в зависимости от ситуации должен писать либо в одну переменную, либо в другую. Например класс tester
при выполнении бета и альфа версии программы должен соответственно писать либо в переменную класса alfalog
или betalog
.
Часто видел вариант решения как:
def write_log(self, beta=true):
...
if beta:
self.betalog += "blabla"
else:
self.alphalog += "blabla"
...
if beta:
self.betalog += "blabl_another"
else:
self.alphalog += "blabl_another"
И в одном методе такая конструкция может встречаться несколько раз. Для себя нашел решение поудобнее. Реализация через ссылки на обьект.
class ref:
def __init__(self, obj): self.obj = obj
def get(self): return self.obj
def set(self, obj): self.obj = obj
def __add__(self, other): "".join(self.obj) + other
def __indexof__(self, i): "".join(self.obj)[i]
class tester:
def __init__(self, ...):
self.alphalog = ref('')
self.betalog = ref('')
....
def write_log(self, beta=true):
log = None
if beta:
log = self.betalog
else:
log = self.alphalog
....
log = log + "blabla"
#в этом месте соответственно будет произведена запись либо в альфа либо в бета, в зависимости от параметра
log += "blabla_another"
Вот такая примерно идея. Для других операций может понадобиться определить другие методы, но это уже легко