Я ищу способ вызова метода экземпляра из другого класса, и мне стало интересно, смогу ли я / как сделать следующее
цель и контекст
Класс, который я пишуявляется формирователем данных , чей метод __rshift__
должен иметь возможность адаптировать формат данных batch
к многим клиентам базы данных без необходимости изменения пользователем используемого метода. Вот как я хотел бы, чтобы метод >>
вызывался
batch = SomeExtractor(config).extract("some")
db_client = InfluxDBClient()
# this would be awesome
DataFormater(batch)>>db_client.write_points
DataFormater
class DataFormater(object):
def __init__(self, batch: Batch):
self.batch = batch
@abstractmethod
def __rshift__(self, db):
db_client = some_way_to_get_the_called_client(db)
method = some_way_to_get_the_method(db)
if method == InfluxDBClient.write_points:
db_client.write_points({"measurement": self.batch.origin,
"time" : self.batch.date,
"tags": dict(zip(self.batch.dimensions_names, row["dimensions"])),
"fields": dict(zip(self.batch.metrics_names, row["values"])}
for row in self.batch.rows))
Погуглил мою проблему, добавил stack = inspect.stack(db)
в методе __rshift__
и получилследующее, но я не уверен, как его использовать
frame = <frame at 0x7f6c2a1515c0, file '/usr/src/collector/collector.py', line 95, code __rshift__>
context = <bound method InfluxDBClient.write_points of <collector.InfluxDBClient object at 0x7f6c2a131510>>
Как я могу это сделать?