这是python中的错误编码吗?

时间:2014-03-27 00:33:19

标签: class python-2.7

是否有一些python规则声明在“ init ”方法中声明/定义所有全局变量?为什么python允许这个?

例如,

,请参阅以下代码:

class Myclass():
  def __init__(self,input):
      self.input = input
  def a_method(self):
      self.sneaky = {}
      local_var = 'a var'
      return local_var
  def another_method(self):
      print self.input
      print self.sneaky, ', O sneaky you bad var'
      return

如果我的班级有很多方法,变量'self.sneaky'很难被发现。并且必须先调用“a_method”,否则在调用“another_method”时会引发AttributeError。我只是在某人的代码中发现它,并想知道这是否是常见做法。

1 个答案:

答案 0 :(得分:1)

首先,您不是在讨论全局变量,而是在谈论实例变量。然后,是否在方法或构造函数中声明变量取决于您使用的场景。

基本上,唯一的规则是在使用变量之前始终声明变量。 (或者你会得到AttributeError例外)。

通常,在init中声明类的所有成员是个好主意,因此您可以使用默认值来处理它们存在的假设。尽管如此,有时您可能更愿意推迟创建类类型以及元素的归属。

一个很好的例子是,如果在一个循环中你创建了一百万个实例,那么你只选择一些在给定时间使用的实例。然后你可能想让构造函数尽可能简单地使用instanciation所需的内容,并创建一个populate()方法,在使用它之前调用它来添加你关于的默认成员使用。在构建图形用户界面时经常会看到这种模式。

HTH