使用继承处理自定义__new __()和__del __()

时间:2017-10-28 11:46:52

标签: python

当我在Python中派生一个类时,我需要从派生的Base.__init__(self)函数中调用__init__(self),如

class Base(object):
    def __init__(self):
        pass

class Der(Base):
    def __init__(self) :
        Base.__init__(self)

我是否需要对__new__(self)__del__(self)等函数执行相同的操作,例如

class Base(object):
    def __new__(self):
        pass
    def __init__(self):
        pass    
    def __del__(self) :
        pass

class Der(Base):
    def __new__(self):
        Base.__new__(self)

    def __init__(self) :
        Base.__init__(self)

    def __del__(self) :
        Base.__del__(self)

我很想知道,因为如果我不这样做,似乎什么都不会出错。 我确信python gc会照顾,但如果我不从Derived链中调用它们,我还有什么需要担心的吗

1 个答案:

答案 0 :(得分:-2)

__del()__new()__的使用很简单,但不是__new()__

由于super().__new()__返回类的实例,我们需要调用class Base(object): def __new__(self): return super().__new__(self) class Derive(Base): def __new__(self): return super().__new__(self); 直到对象链,如下所示

__del()__

__init()__可以使用类似于Base.__del()__,调用__del()不是强制性的,除非并且直到基本class Base(object): def __new__(self): return super().__new__(self) def __init__(self): self.Value = 200 def __del__(self): pass class Derive(Base): def __new__(self): return super().__new__(self); def __init__(self): Base.__init__(self) def __del__(self): Base.__del__(self) 函数需要进行一些清理。

编写问题中提到的代码的正确方法是

__new()__

除非我们真的需要,否则最好不要实施__del()__<?php if { // do stuff } else { if { // do stuff } else { echo "<div class = 'reddit-image pull-left' style = 'width:180px'><img src = '" . get_post_meta($post->ID, 'wpedditimage', true ) . "' width = '180px' class='img-rounded'></div>"; } ?>