2016-10-06 10 views
0

Каков правильный способ работы с переменными внутри класса?Правильный способ установки переменных в классе python

1- установки их в качестве атрибутов класса, где мы получаем их и доступ к ним из самого класса:

class NeuralNetwork(object): 

    def __init__(self, topology): 
    self.topology = topology 
    self.buildLayers() 

    def buildLayers(self): 
    for layer in self.topology: 
     #do thing 

2- пропуская их через методы, которые нам нужны их без назначения в классе, если они не очень полезные переменные :

class NeuralNetwork(object): 

    def __init__(self, topology): 
    self.buildLayers(topology) 

    def buildLayers(self, topology): 
    for layer in topology: 
     #do thing 

3- смесь из вышеупомянутых двух:

class NeuralNetwork(object): 

    def __init__(self, topology): 
    self.topology = topology 
    self.buildLayers(self.topology) # or self.buildLayers(topology) ? 

    def buildLayers(self, topology): 
    for layer in topology: 
     #do thing 

Я думаю, что первый из них является правильным, но не позволяют повторно использовать функцию для различных целей без присвоения нового значения переменной, что будет выглядеть как эти:

self.topology = x 
self.buildLayers() 

Что выглядит странно и вы не понимаете, что изменение self.topology влияет на вызов self.buildLayers()

ответ

2

В общем, первый способ - это «действительно объектно-ориентированный» способ, и гораздо предпочтительнее второго и третьего.

Если вы хотите, чтобы функция buildLayers могла время от времени менять топологию, дайте ей параметр. топология со значением по умолчанию = Нет.

Пока вы не проходите этот параметр. при вызове buildLayers он будет использовать this.topology. Если вы пройдете его, он будет использовать тот, который вы передали, и (если хотите) измените this.topology на него.

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

Это забава программирования, вы никогда не перестаете учиться на опыте.

0

1-й вариант является правильным и рекомендуется. Поскольку это будет объектно-зависимым.