具有不同参数量的抽象类

时间:2017-03-14 06:04:10

标签: python python-3.x abc

我想知道在使用抽象方法创建抽象类时是否可能,如果它可以允许派生类中这些方法的实现为每个函数提供不同数量的参数。

我目前有我的抽象类

from abc import ABCMeta, abstractmethod

class View(metaclass=ABCMeta):
    @abstractmethod
    def set(self):
        pass

    @abstractmethod
    def get(self):
        pass

但是我希望能够在一个类中实现它,set有1个参数并且得到2 (set(param1)get(param1, param2)), 然后在另一个类中也继承它,但set有0个参数,get有2个参数 (set()get(param1, param2))。

这是可能的,如果可以的话,我将如何去做呢

2 个答案:

答案 0 :(得分:14)

没有检查具体实现的参数数量。所以没有什么可以阻止你这样做了。

只需定义这些方法即可接受您需要接受的任何参数:

class View(metaclass=ABCMeta):
    @abstractmethod
    def set(self):
        pass

    @abstractmethod
    def get(self):
        pass


class ConcreteView1(View):
    def set(self, param1):
        # implemenation

    def get(self, param1, param2):
        # implemenation


class ConcreteView2(View):
    def set(self):
        # implemenation

    def get(self, param1, param2):
        # implemenation

答案 1 :(得分:0)

蟒蛇 3.8

from abc import ABC, abstractmethod


class SomeAbstractClass(ABC):
    @abstractmethod
    def get(self, *args, **kwargs):
        """
        Returns smth
        """

    @abstractmethod
    def set(self, key, value):
        """
        Sets smth
        """

class Implementation(SomeAbstractClass):
    def set(self, key, value):
        pass

    def get(self, some_var, another_one):
        pass

```python

Works perfectly, no warnings, no problems