理解Python中的__init__

Mar*_*ano 2 python oop

我正在处理我收到的Python文件,当我在Python中进行初始化时,我看到一个包含多种变量的类.我不清楚在定义属性时应该遵循什么逻辑,哪些是初始化或不是,在代码的一部分下面:

class Simulator(object):
    colors = {'gray'    : (155, 155, 155)}

    def __init__(self, env, size=None, update_delay=2.0, display=True):
        self.env = env
        self.size = size if size is not None else self.env.grid_size[0]
        self.road_width = 44
        self.bg_color = self.colors['gray']

        self.quit = False
        self.start_time = None
        self.current_time = 0.0
        if self.display:
            try:
                self.pygame = importlib.import_module('pygame')
                self.pygame.init()
                self.screen = self.pygame.display.set_mode(self.size)
Run Code Online (Sandbox Code Playgroud)

例如:

  • env :它在括号中声明,稍后在初始化 - >清除

  • size:它已声明,但初始化时使用self.env.grid_size[0].怎么env会有一个grid_size没有定义或初始化的属性?

  • road_with:为什么括号中没有提到它?我会把road_with括号放在默认值为44的括号中

  • bg_color:为什么它没有在括号中定义?

  • 为什么quit,start_time,current_time未在括号中定义?

  • 如何声明但不初始化self.pygame与之前未在代码中调用的模块相关的?

  • 如何使用self.pygame.init()?启动另一个模块?

tim*_*geb 5

size:声明它但在初始化时它使用self.env.grid_size [0].如果env可以有一个未定义或初始化的属性grid_size?

在之前的行中,self.env被设置为用户在创建实例时提供给初始化程序的第一个位置参数Simulator.由用户提供具有属性的对象grid_size.(这可能应该通过doc-string或类型提示来提及.)

road_with:为什么括号中没有提到它?我会把road_with放在括号中,默认值为44

只让用户知道他必须知道对象的内部工作原理.这是信息隐藏的原则.如果我们的对象的每个实例都应该携带road_width带有值的属性,那么44为什么要用另一个可选参数来打扰用户road_width呢?不清楚用其他值调用初始化程序甚至会做什么?

bg_color:为什么它没有在括号中定义?
为什么quit,start_time,current_time没有在括号中定义?

往上看

我不明白你的最后两个问题.