Я делаю класс с цепными методами, проблема в том, что есть некоторые методы с *args
параметрами, эти параметры могут получать объекты того же класса.
class A(object):
def __init__(self, x=''):
self.x = ''
@property
def tab(self):
self.x = '\t'
return self
def concat(self, *args):
self.x += ''.join(str(a) for a in args)
return self
def surround(self, *args):
args = tuple(['('] + list(args) + [')'])
return self.concat(*args)
def __str__(self):
return self.x
Нет проблем с этим , вы можете сделать:
obj = A()
obj2 = obj.tab.surround('x', 'y')
print str(obj2)
output: \t(xy)
Но если я хочу передать метод tab
методу surround
, это должно быть:
obj = A()
obj2 = obj.tab.surround(A().tab, 'x', 'y')
Есть ли способ вызвать метод tab
без создания экземпляра объекта? Я имею в виду, что-то вроде этого:
obj = A()
obj2 = obj.tab.surround(A.tab, 'x', 'y') # Note the lack of parenthesis.
Я искал ответы, составляющие что-то вроде @classmethod
+ @property
, но ни один из них не решил мою проблему. Приветствуется решение для python 2.x и 3.x, потому что я хочу сделать его совместимым с обеими версиями, но также приветствуется решение только для 1 версии.