我想知道在使用抽象方法创建抽象类时是否可能,如果它可以允许派生类中这些方法的实现为每个函数提供不同数量的参数。
我目前有我的抽象类
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)
)。
这是可能的,如果可以的话,我将如何去做呢
答案 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