首页 > 解决方案 > 在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")
    

标签: pythoninheritanceabstract-classdecoratorpython-decorators

解决方案


你的意思是你想要不同的派生类,它们的绘图方式不同吗?

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

推荐阅读