Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 防止在父构造函数中调用的方法在子构造函数中调用_Python_Python 3.x_Oop - Fatal编程技术网

Python 防止在父构造函数中调用的方法在子构造函数中调用

Python 防止在父构造函数中调用的方法在子构造函数中调用,python,python-3.x,oop,Python,Python 3.x,Oop,假设我有一个父类和一个从父类继承的子类 class Parent: def __init__(self) stubborn() class Child(): def __init__(self): super().__init__(self) 我不希望每次调用父构造函数时都调用顽固的方法 在儿童班。如何处理此问题?您可以定义一个Parent的classmethod,用于检查您是否在Parent中,然后使用该方法确定是否调用顽固 class Parent

假设我有一个父类和一个从父类继承的子类

class Parent:
    def __init__(self)
    stubborn()

class Child():
      def __init__(self):
      super().__init__(self)
我不希望每次调用父构造函数时都调用顽固的方法
在儿童班。如何处理此问题?

您可以定义一个
Parent
classmethod
,用于检查您是否在
Parent
中,然后使用该方法确定是否调用
顽固

class Parent:
    def __init__(self):
        if self.is_parent():
            self.stubborn()
    @classmethod
    def is_parent(cls):
        return cls is Parent
    def stubborn(self):
        print("stubborn called")

class Child(Parent): pass

p = Parent() # stubborn called
c = Child() # no output

如果不实际更改该函数或
顽固()
,您将无法在
父级中对其执行任何操作

但是,作为孩子,您可以通过临时将
顽固()方法设为存根来阻止它做任何重要的事情:

class Child():
    def __init__(self):
        old_stubborn = self.stubborn
        self.stubborn = lambda:None  # stub function that does nothing
        super().__init__(self)
        # put stubborn() back to normal
        self.stubborn = old_stubborn

完全重新设计。您必须更改
父项。
父项添加可选参数:
def\uu初始化(self,call\u顽固=True):
?噢,讨厌!我想这个例子有助于将“动态”放在“动态语言”中!