相关疑难解决方法(0)

构造函数(Python)之外的方法中的实例变量 - 为什么以及如何?

我的问题涉及在类构造函数之外的方法中初始化的实例变量.这适用于Python.

我先说出我的理解:

  1. 类可以定义构造函数,也可以定义其他方法.
  2. 实例变量通常在构造函数中定义/初始化.
  3. 但是实例变量也可以在构造函数之外定义/初始化,例如在同一类的其他方法中.
  4. (2)和(3)的一个例子 - 参见下面的Cat类中的self.meowself.roar:

    class Cat():
    
        def __init__(self):
            self.meow = "Meow!"
        def meow_bigger(self):
            self.roar = "Roar!"
    
    Run Code Online (Sandbox Code Playgroud)

我的问题:

  1. 为什么在构造函数中初始化实例变量是最佳实践?

  2. 如果实例变量在构造函数以外的方法中定期初始化,可能会出现一般/特定的混乱?(例如,在他的编程Python中读过Mark Lutz的Tkinter指南,我认为这很好,我注意到用于保存PhotoImage对象/引用的实例变量在其他方法中初始化,而不是在构造函数中初始化.它似乎没有工作问题,但从长远来看,这种做法是否会引起问题?)

  3. 在哪些情况下,在其他方法中而不是在构造函数中初始化实例变量会更好


  1. 据我所知,实例变量不是在创建类对象时存在,而是实例化类对象之后存在.继续我上面的代码,我证明了这一点:

    >> c = Cat() 
    >> c.meow
    'Meow!'
    >> c.roar
    Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
    AttributeError: 'Cat' object has no attribute 'roar'
    >>> c.meow_bigger()
    >>> c.roar
    'Roar!'
    
    Run Code Online (Sandbox Code Playgroud)

    原样:

    • 我一开始无法访问实例变量(c.roar).
    • 但是,在我调用实例方法c.meow_bigger()一次后,我突然能够访问实例变量c.roar …

python constructor class instance-variables

6
推荐指数
2
解决办法
5526
查看次数

标签 统计

class ×1

constructor ×1

instance-variables ×1

python ×1