Python 我需要声明两次类变量吗?

Python 我需要声明两次类变量吗?,python,class,variables,python-2.7,Python,Class,Variables,Python 2.7,我一直在研究使用几个类的东西。现在,我的代码如下所示: class name: *docstrings and stuff* var1=default_value1 var2=default_value2 def __init__(self): self.var1=default_value1 self.var2=default_value2 我想这是没有必要的,我可以只使用其中一个声明“块”,但我并不完全理解它是如何工作的。在创建新对象时,默认情况下应用类

我一直在研究使用几个类的东西。现在,我的代码如下所示:

class name:
  *docstrings and stuff*
  var1=default_value1
  var2=default_value2
  def __init__(self):
    self.var1=default_value1
    self.var2=default_value2  

我想这是没有必要的,我可以只使用其中一个声明“块”,但我并不完全理解它是如何工作的。在创建新对象时,默认情况下应用类中定义的变量?如果是这样,那么这样做而不是在构造函数中声明所有内容的好处是什么


我不太清楚我为什么要这样做,我一定是从网上看到的某个例子中选出来的,剩下的都是copypaste做的。我正在检查我的代码,我想确保它是有意义的。

如果变量是类变量而不是实例变量,则不需要在uu init uu中定义它。我不确定在这种情况下您到底想完成什么,所以很难说如何最好地构造代码

例如,我为我的公司编写了一个小模块,帮助我编写访问各种机器的脚本。我在一家零售商工作,所以我们通常有两种类型的系统:后台计算机和注册计算机

class Machine(object):
    def __init__(self,store):
        self.store = store

class Register(Machine):
    type_ = "Register"
    def __init__(self,store,reg_num):
        super().__init__(self,store)
        self.number = reg_num
        self.IP = # IP address based on store and register number

class BackOffice(Machine)
    type_ = "Back Office"
    def __init__(self,store):
        super().__init__(self,store)
        self.IP = # IP address based on store
类型变量是类变量。BackOffice1可能指商店1的后台计算机,BackOffice1.type==后台。但是,IP在不同的BackOffice中会有所不同,因此我不将其声明为类变量,而是一个实例变量

如果我想编写一个实用程序,返回存储列表的所有寄存器,这可能会有所帮助:

def listRegisters(storelist):
    stores = makestorelist(storelist) # a separate function that builds
                                      # stores and all their devices
    return [machine for store in stores for 
           machine in store.devices if machine.type_ == "Register]

当然,如果我是instancemachine,我也可以这样做,但这不是重点。

正如user2357112指出的,类变量并不像我想象的那样是类实例的默认值,因此,在类级别定义变量不会生成这些变量,并在构建该类的对象时将其默认为所述值。因此,构造函数前面的变量语句根本就不是必需的


我不知道这种误解从何而来,但这正是我需要知道的。阅读在线教程时,请务必仔细检查。

如果变量是类变量而不是实例变量,则不需要在_uinit_;中定义它。我不确定在这种情况下您到底想完成什么,所以很难说如何最好地构造代码。如果您发布一个示例类,将更容易帮助您。在创建新对象时,默认情况下会应用该类中定义的变量?-他们不是。它们是类变量。如果期望单个实例具有自己的值,则它不属于类级别。