python - 在python中装饰基类方法
问题描述
我有一个 python 类,例如:
from abc import ABC, abstractmethod
class Drawing(ABC):
@abstractmethod
def draw(self):
pass
class Sketch(Drawing):
# overriding abstract method
def draw(self):
print("Drawing a sketch")
# Driver code
R = Sketch()
R.draw()
这是他想要实现的目标:
创建一个实现draw()接口的抽象绘图类。以 Sketch 类的形式开发 Drawing 类的子类。使用 Sketch 绘制的消息使 draw() 接口更加具体。
问题: 但我也想创建改变素描风格的装饰器(例如“铅笔素描”或“钢笔素描”)。我的问题是我怎样才能做到正确,我在下面的代码中所做的是否正确?
class Drawing(ABC):
@abstractmethod
def draw(self):
pass
@abstractmethod
def drawPencil(self):
pass
@abstractmethod
def drawPen(self):
pass
class Sketch(Drawing):
def draw(self):
print("Drawing a sketch")
def drawPencil(self):
print("Drawing with pencil")
def drawPen(self):
print("Drawing with pen")
解决方案
你的意思是你想要不同的派生类,它们的绘图方式不同吗?
from abc import ABC, abstractmethod
class Drawing(ABC):
@abstractmethod
def draw(self):
pass
class Sketch(Drawing):
def draw(self):
print("Drawing a sketch")
class PencilSketch(Drawing):
def draw(self):
print("Drawing with pencil")
class PenSketch(Drawing):
def draw(self):
print("Drawing with pen")
drawObjs = [Sketch(), PencilSketch(), PenSketch()]
for obj in drawObjs:
obj.draw()
输出:
Drawing a sketch
Drawing with pencil
Drawing with pen
推荐阅读
- kotlin - 无法访问'
':它是公共的 /*package*/ 在 'Constructor' - python - 为什么在使用 Fabric 而不是 ssh 运行脚本时 systemd 会获取子进程?
- python-3.x - 可以在python中调用基函数内部的嵌套函数吗?
- c - 如何在 c/c++ 程序中使用 Winpcap 库跟踪 LoopBack 接口?
- bigdata - vespa.ai 中是否有任何方法可以让我使用打乱的查询字符串进行查询?
- javascript - Javascript 错误处理什么也没捕获
- excel - VBA:将表格从 Excel 发送到 Outlook
- api - 从我的本地主机获得 404 响应
- spring - 如何解决 Spring Boot 中解析 YAML 配置的错误?
- jquery - How to get child element in each loop if already bind 'this' to class in JQuery?