如何删除类似的python类之间的重复

时间:2016-03-12 19:47:10

标签: python class

我目前有两个类:Block和Pic

不幸的是它们几乎完全相同。我正在寻找删除两个类中重复部分的最佳方法。

class Block(pygame.sprite.Sprite):

    def __init__(self, colour, width, height):
        pygame.sprite.Sprite.__init__(self)

        self.image = pygame.Surface([width, height])
        self.image.fill(colour)

    def invert(self):
        self.image = inverted(self.image)

    def set_speed(self, speed):
        self.speed = speed

class Pic(pygame.sprite.Sprite):

    def __init__(self):
        pygame.sprite.Sprite.__init__(self)

        self.image = pygame.image.load('icon.png').convert()

    def invert(self):
        self.image = inverted(self.image)

    def set_speed(self, speed):
        self.speed = speed

3 个答案:

答案 0 :(得分:3)

使用class inheritance,即创建一个包含公共部分和类方法的类,并从这个新类派生您的类BlockPic

这里给出了一些例子:http://www.jesshamrick.com/2011/05/18/an-introduction-to-classes-and-inheritance-in-python/

答案 1 :(得分:3)

如何创建公共基类?

class BaseClass(pygame.sprite.Sprite):
    'baseclass for your derived classes, feel free to choose a better name'
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)

    def invert(self):
        self.image = inverted(self.image)

    def set_speed(self, speed):
        self.speed = speed

class Block(BaseClass):
    def __init__(self, colour, width, height):
        super(Block, self).__init__()
        self.image = pygame.Surface([width, height])
        self.image.fill(colour)

class Pic(BaseClass):
    def __init__(self):
        super(Pic, self).__init__()
        self.image = pygame.image.load('icon.png').convert()

答案 2 :(得分:0)

如果这些类在您的应用程序中是可互换的 - 也就是说您可以将其替换为另一个并且应用程序不会注意到 - 创建一个包含invert和set_speed方法的超类,并让类继承它。他们可以保留__ init __方法。