python支持保护类型_如何在Python中保护基类的功能?

我目前正在学习 python中的模板方法模式。

我想知道是否有任何方法可以保护基类中的某些函数,以便子类不能覆盖?如下所示,_primitive_operation_3子类从基类覆盖相同的函数。import abc

class AbstractClass(metaclass=abc.ABCMeta):

"""

Define abstract primitive operations that concrete subclasses define

to implement steps of an algorithm.

Implement a template method defining the skeleton of an algorithm.

The template method calls primitive operations as well as operations

defined in AbstractClass or those of other objects.

"""

def template_method(self):

self._primitive_operation_1()

self._primitive_operation_2()

self._primitive_operation_3()

# Functions must be specified by subclass (i.e., subclass variant)

@abc.abstractmethod

def _primitive_operation_1(self):

pass

# Functions must be specified by subclass (i.e., subclass variant)

@abc.abstractmethod

def _primitive_operation_2(self):

pass

# Functions inherited and not modified by subclass (i.e., subclass invariant)

def _primitive_operation_3(self):

print ('Execute operation #3 from main class')

class ConcreteClass(AbstractClass):

"""

Implement the primitive operations to carry out

subclass-specificsteps of the algorithm.

"""

def _primitive_operation_1(self):

pass

def _primitive_operation_2(self):

pass

# You can still overwrite it if you want

def _primitive_operation_3(self):

print ('Execute operation #3 from subclass')

def main():

concrete_class = ConcreteClass()

concrete_class.template_method()

if __name__ == "__main__":

main()

如果无法阻止来自基类的方法被覆盖,我怎么能放置一些东西来提供一个自动警告/警告,指示基类中的特定方法是否已被覆盖?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值