具有不同数量参数的摘要 类
Abstract classes with varying amounts of parameters
我想知道在使用抽象方法创建抽象 class 时是否可能允许派生 classes 中的这些方法的实现对每个方法具有不同数量的参数功能。
我目前有我的摘要class
from abc import ABCMeta, abstractmethod
class View(metaclass=ABCMeta):
@abstractmethod
def set(self):
pass
@abstractmethod
def get(self):
pass
但我希望能够在一个 class 中实现它,其中设置有 1 个参数并获得 2 个参数
(set(param1)
和 get(param1, param2)
),
然后在另一个 class 中也继承了它,但是 set
有 0 个参数,get
有 2 个参数
(set()
和 get(param1, param2)
)。
这可能吗?如果可以,我会怎么做
不检查具体实现采用多少参数。所以已经没有什么能阻止你这样做了。
只需定义那些方法来获取您需要接受的任何参数:
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
python 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
完美运行,没有警告,没有问题
我想知道在使用抽象方法创建抽象 class 时是否可能允许派生 classes 中的这些方法的实现对每个方法具有不同数量的参数功能。
我目前有我的摘要class
from abc import ABCMeta, abstractmethod
class View(metaclass=ABCMeta):
@abstractmethod
def set(self):
pass
@abstractmethod
def get(self):
pass
但我希望能够在一个 class 中实现它,其中设置有 1 个参数并获得 2 个参数
(set(param1)
和 get(param1, param2)
),
然后在另一个 class 中也继承了它,但是 set
有 0 个参数,get
有 2 个参数
(set()
和 get(param1, param2)
)。
这可能吗?如果可以,我会怎么做
不检查具体实现采用多少参数。所以已经没有什么能阻止你这样做了。
只需定义那些方法来获取您需要接受的任何参数:
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
python 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
完美运行,没有警告,没有问题