更改Python对象的方法(重新分类?)

时间:2013-10-08 08:23:02

标签: python oop constructor

问题是Reclassing an instance in Python的扩展,其中OP很好地解释了这种情况(外来lib中的类,自己代码中的子类)。 但是,恕我直言的答案仍然有一些公开的细节:

  • 如果我将父对象重新分类为子对象,是否有一个子构造函数是否有效?毕竟,由于缺少copy-costructor(连同深度和浅层复制的所有问题),我不能指望正确构造完整的父对象(即使我知道父构造函数签名,请参阅self._secret在示例中)。锁定子构造函数是否明智(例如在那里抛出异常)?
  • C ++如何处理这种情况(继承)?
  • 我是否用代码打破了各种OOP原则?面对某些设计模式,这是一记耳光吗?根据我的需要改进物体的一些细微细节的基本想法毕竟不是那么有罪。

foreign_lib.py:

lib_data = "baz"

class parent:
    def __init__(self,foo,bar):
        self._foo = foo
        self._bar = bar

    def do_things(self):
        print(self._foo,self._bar)

    def do_other_things(self,one2one_reference): 
       # this parent and the one2one_reference shall
       # live in a 1:1 relationship
        self._secret = one2one_reference  # maybe ugly,but not in  
                                          # our hands to correct it

def some_lib_func():
    p = parent("foo","bar")
    p.do_other_things(lib_data)
    return p

my_code.py:

class child(foreign_lib.parent):
    def do_things: # but differently!
        print(42)
        super().do_things()

    # do_other_things() shall be inherited  as is

    def __init__(self,p):
        # out of luck here, no copy-constructor for parent?

    @classmethod
    def convert_to_child(cls,a_parent):
        a_parent.__class__ = cls

a_child = child(some_lib_func())  # will not work correctly
a_child = child.convert_to_child(some_lib_func()) # maybe this one?

0 个答案:

没有答案