Я новичок в Python, и я пытался найти лучший способ перенести кучу беспорядочных методов класса (которые обращаются к переменным-членам) в отдельный модуль типа Utils.py для очистки.Имена методов все еще должны быть унаследованы базовым классом, но они также должны иметь доступ к методам класса parnet.Я детализирую фон, потому что я думаю, что мог бы быть лучший способ решения этой проблемы на python.
По сути, мне нужно сделать что-то вроде следующего, если я пытался сделать это с помощью наследования: (Япоиграл с супер, но я не смог решить это таким образом)
class Graph(GraphUtils):
graph_size = 10
def print_size(self):
print self.graph_size
class GraphUtils():
def set_size(self, new_size)
self.graph_size = new_size
if __name__ == "__main__":
g = Graph()
print "Graph default size: " + str(g.graph_size) # This is 10
g.set_size(20)
g.print_size() # I want it to print 20, but it'll print the default 10
Я знаю, что есть еще один способ объединения для импорта методов и переменных класса в другой класс, но я запускаю пространство имен рискаколлизии.
Техника, которую я использовал в аналогичном случае, когда отдельный модуль требовался для появления в нашей библиотеке в качестве надстройки, выглядела следующим образом: (идея надстройки возникла изжелание дополнительно распространять дополнительные функции на класс Graph, все это связано с лицензированием)
class Graph:
ext = None
graph_size = 10
def __init__(self):
self.ext = Extension()
self.ext._graph = self
def set_size(self, new_size):
self.graph_size = new_size
class Extension:
_graph = None
def process(self):
print "Processing graph size: " + str(self._graph.graph_size)
if __name__ == "__main__":
g = Graph()
print "Graph default size: " + str(g.graph_size) # This is 10
g.set_size(20)
g.ext.process()
# Output: Processing graph size: 20
Просто интересно, что вы, ребята, считаете лучшим подходом, или это может быть разумно (безопасно) реализовано в Python.(2.6 +)
Спасибо!