2016-07-19 3 views
-4

Im довольно новый для языков ООП, и у меня есть сценарий, в котором я хочу разделить переменную между двумя классами, у которых есть методы. В классе Один у меня есть функция с переменной var1. Я хотел бы сделать эту переменную доступной для моего класса Two, func2, однако я не уверен, как это сделать?share variable между классами и методами

class One(object): 

    def func1(self): 
     var1 = 'foo' 

class Two(object): 

    def func2(self): 
    # how can i get var1 here ? 
+3

Вы должны либо передать переменную методу, либо один из классов может наследовать от другого и, таким образом, получить его переменные, но это предполагает, что вы достаточно хорошо понимаете ООП, чтобы знать разницу между самим абстрактным классом и (как показано, переменная существует только в локальной области действия метода и определяется ее методом '__init__'). Вы также можете сделать глобальную переменную или часть объекта третьего класса, которые используют One и Two. Трудно сказать «Один» и «Два» и не понимать фактические отношения данных. – Dan

+2

Также возможно, что вы хотите, чтобы 'var1' являлся переменной экземпляра, а не локальной переменной (например, 'self.var1 = 'foo''). Тогда 'func2' мог получить доступ к его значению, если бы у него была ссылка на экземпляр' One' (хотя из того, откуда этот экземпляр пришел, невозможно сказать, насколько абстрактным является этот вопрос). – Blckknght

+0

Вы получите намного лучшие ответы, если вы сделаете это менее абстрактным, чтобы понять связь между «одним» и «двумя» (если таковые имеются) (выберите аналогичную взаимосвязь, если реальная является конфиденциальной). – Dan

ответ

0

Если один из классов действительно может быть подклассом другого класса, вы можете использовать наследование.

class One(object): 

    def func1(self): 
     var1 = 'foo' 

class Two(One): 

    # func1 already exists here. 
    # So does var1 

Вы можете сделать функцию принимать аргументы

class One(object): 

    def func1(self): 
     var1 = 'foo' 

class Two(object): 

    def func2(self, var): 
     # Use var 

Или вы можете использовать глобальные переменные, но я думаю, что вы хотите, чтобы избежать этого, если вы просто введя ООП.

Примечание: Позвольте мне указать, что использование глобальных переменных в крупных проектах и ​​программах подвержено многим ошибкам на практике. Вы можете использовать его, пока не получите опыт перехода к другому методу. Но в конечном итоге вам придется отказаться от использования их в ООП. Я предложил это только для практических целей. Помните об этом во время кодирования.

Редактировать: В вашем случае вы можете использовать элементы статического класса, например.

class One(object): 
    var1 = "foonimo" 
    def func1(self): 
     #use var1 

class Two(object): 

    def func2(self, var): 
     # Use as One.var1 

Это должно работать, и это более возможно, чем глобальные переменные.

+0

1. Первый бесполезен, если OP хочет перегрузить метод. 2. 'вы можете использовать глобальные переменные' - это то, на что я фактически голосую. –

+1

@EliKorvigo Что я посоветовал избежать, однако вы не можете отрицать, что это вариант. – Rockybilly

+0

Он новичок, поэтому я бы поставил гораздо больше внимания на этот совет. –

Смежные вопросы