Если ваш ресурсный объект уникален, можете ли вы сделать его одноэлементным?Тот факт, что вы хотите использовать его из метода класса, заставляет меня думать, что это, вероятно, так.Если его единственной целью является предоставление соединения с базой данных, не могли бы вы рассмотреть возможность использования пула соединений?
Если вам все еще нужно передать его своим классам, вы можете просто назначить его атрибутам класса.
class Vertex(object):
@classmethod
def foo(cls):
print cls.resource
Vertex.resource = 'something'
v = Vertex()
v.foo()
Это также можно сделать в __init__
:
class Vertex(object):
def __init__(self, resource):
if not hasattr(self.__class__, 'resource'):
self.__class__.resource = resource
@classmethod
def foo(cls):
print cls.resource
resource = 'some resource'
v = Vertex(resource)
v.foo()
Но на самом деле моя интуиция заключается в том, что вы должны изучить использование синглтона, который во многих случаях может быть реализован в Python просто как модуль.
Наконец, если я смогу сделать пару замечаний по поводу вашего кода, меня смущает, что вы присваиваете классы множественным именам переменных.Когда я вижу self.edges
, я ожидаю коллекцию или итерацию, а не класс.Мне также интересно, зачем вам нужен метод класса с именем create
.Что он делает, что __init__
не может сделать?