在python类中设置变量的正确方法

在python类中设置变量的正确方法,python,class,variables,standards,Python,Class,Variables,Standards,在类中使用变量的正确方法是什么 1-将它们设置为类属性,从类本身获取并访问它们: class NeuralNetwork(object): def __init__(self, topology): self.topology = topology self.buildLayers() def buildLayers(self): for layer in self.topology: #do thing 2-通过我们需要的方法传递它们,如果它们

在类中使用变量的正确方法是什么

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()

一般来说,第一种方法是“真正面向对象”的方法,与第二种和第三种方法相比更受欢迎

如果希望buildLayers函数能够偶尔更改拓扑,请为其指定一个参数。默认值为无的拓扑

只要你不超过那个参数。在调用buildLayers时,它将使用this.topology。如果您传递它,它将使用您传递的,并且(如果您愿意)将this.topology更改为它

顺便说一句,虽然一开始就坚持这样的规则是明智的,但编程中并没有真正的教条。随着经验的增长,你会发现每一条规则都有许多完全正常的例外


这就是编程的乐趣,你永远不会停止从经验中学习。

一般来说,第一种方法是“真正面向对象”的方法,与第二种和第三种方法相比更受欢迎

如果希望buildLayers函数能够偶尔更改拓扑,请为其指定一个参数。默认值为无的拓扑

只要你不超过那个参数。在调用buildLayers时,它将使用this.topology。如果您传递它,它将使用您传递的,并且(如果您愿意)将this.topology更改为它

顺便说一句,虽然一开始就坚持这样的规则是明智的,但编程中并没有真正的教条。随着经验的增长,你会发现每一条规则都有许多完全正常的例外


这就是编程的乐趣,你永远不会停止从经验中学习。

第一个是正确的,推荐使用。因为这将取决于对象。

第一个是正确的,建议使用。因为这将依赖于对象