Python3 прогнать все свойства класса через функцию
Не знаю как правильно назвать одним словом то, чего я хочу.
В общем есть класс Event:
class Event:
def __init__(self, name: str, link: str, start_date: str, finish_date: str, format: str, weight: str):
self.name = name
self.link = link
self.start_date = start_date
self.finish_date = finish_date
self.format = format
self.weight = weight
self.markdown_beautify()
def __iter__(self):
yield 'name', self.name
yield 'link', self.link
yield 'start_date', self.start_date
yield 'finish_date', self.finish_date
yield 'format', self.format
yield 'weight', self.weight
И хотелось бы прогнать все переменные в классе прогнать через метод.
Что-то в стиле:
def markdown_beautify(self):
for x in self:
x = markdown_decoration.quote(x)
Как это правильно реализовать?
UPD:
После ответа @VictorVosMottorthanksMonica написал более менее рабочий код.
Но в eval('self.' + x) (или getattr(self, x)) кладется экземпляр объекта, а не ссылка на объект.
dirs = dir(self)
dirs = [x for x in dirs if not x.startswith('__')]
dirs = [x for x in dirs if not callable(getattr(self, x))]
for x in dirs:
var = eval('self.' + x)
var = method(var)
Ответы (2 шт):
Автор решения: Victor VosMottor thanks Monica
→ Ссылка
Example:
class Object():
def __init__(self):
self.attr1 = 1234
self.attr = 100
def go(self):
for x in filter(lambda el: not el.startswith('__') and not callable(getattr(self, el)), dir(self)):
setattr(self, x, getattr(self, x)+1)
object = Object()
print(object.attr, object.attr1)
object.go()
print(object.attr, object.attr1)
Автор решения: icYFTL
→ Ссылка
Решил докинуть более красивое решение:
class lol:
def __init__(self):
self.kek = 'lolo'
self.rofl = 'kek'
self.kekrofl = 1
self.ok = False
_ = lol()
for var in vars(_):
setattr(_, var, 'AZAZA')
print(vars(_)) # Everything is AZAZA