为什么在构造函数外部分配类字段

时间:2019-04-15 22:18:14

标签: python oop

我最近看到了在调用构造函数之后将代码列表分配给对象字段的代码。


# Inside the "Block" class definition
def __init__(self, name, access, address=None):
    ModuleBS.__init__(self, name, address)
    self.access = access
    self.mem_list = [] 



# Calling the constructor
tmp_blk = Block(block_name, name, access, sys_addr)
tmp_blk.mem_list = memory_list          ## assignment occurs after constructor invoked

这是有原因的吗?为什么要优先于在构造函数内部初始化mem_list而不是通过将memory_list作为构造函数参数进行传递呢?

谢谢

1 个答案:

答案 0 :(得分:2)

首先,mem_list正在类'__init__中初始化:

# Inside the "Block" class definition
def __init__(self, name, access, address=None):
    ...
    self.mem_list = []

稍后的调用只是一个值更改-有些仅使用append()insert(),有些仅通过现有列表。

对于您的第二个问题,两种方法都是可以的-我主要是在编写类,这样我可以通过类调用初始化一些变量,并进行简单的检查以查看传递的数据是否有效,然后再进行检查只要需要,就可以更改该变量-只要我的init方法没有很多参数即可。

在这种情况下,只用必要的字段(对其他字段具有一些“默认”值)初始化类,然后直接直接更改这些值,可能会更简单。