我只是想在Python中练习编写一个抽象方法,我有以下代码:
import abc
class test(abc.ABC):
@abc.abstractmethod
def first(self,name):
"""This is to be implemented"""
class Extendtest(test):
def __init__(self,name):
self.name = name
def first(self):
print ("Changing name!")
self.name = "Shaayan"
def second(self,value):
print ("Adding second argument!")
self.value = value
e = Extendtest("Subhayan")
print (e.name)
e.first()
print (e.name)
我故意改变了抽象方法实现中第一个方法的签名。
但是,如果我更改签名,Python不会发出任何错误,并且正在按预期进行。
在Python中我没有办法强迫严格抽象吗?
答案 0 :(得分:1)
这不是一个关于python和简短答案的新问题:
不,这是不可能的。最简单的方法是重用像zope这样的自定义库,或者自己实现这种行为。
ABC有一项提案要检查论据,这就是Guido对此的回答:
这不是一个新想法。到目前为止,我一直拒绝它,因为我 担心误报和漏报。尝试去 强制该方法应该行为(甚至它的返回 类型)是没有希望的;可以有多种原因来修改 参数列表仍然符合接口的(意图)。 我也担心它会减慢一切。
那就是说,如果你想提供一个可以的标准机制 可选以启用以检查参数一致性,例如通过在子类上使用类或方法装饰器,我会没问题 (只要它纯粹在类定义时运行;它不应该慢 down class instantiation或方法调用)。它甚至可能会发现 一些错误。它也肯定必须调整以避免确定 上课误报。