Python中的抽象类,继承和工厂方法

时间:2018-04-21 11:46:32

标签: python oop inheritance abstract-class factory

我对我应该采取的正确方法感到困惑 我正在创造一种游戏,在这个游戏中主角有配件。

所以我在想一个名为Item的抽象类。继承自Item也是抽象类,如眼镜,衬衫等...... 我认为它应该是抽象的原因是我从不创造眼镜,例如,我创建了一个"绿色阴影"的实例。绿色阴影也是一个类,我认为它应该从眼镜继承。 我正在考虑将Item设为抽象类,而Glass也是一个抽象类,但他们有一个工厂方法可以生成眼镜类型(绿色阴影,蓝色阴影等)。

每件物品都有价值物品(基本或罕见)。 我已经开始写一些东西,但我对实现细节感到困惑。

档案:

from enum import Enum
from abc import ABCMeta, abstractmethod

class Worth(Enum):
    BASIC = 0
    RARE = 1

class Item(object):
    __metaclas__ = ABCMeta

    def __init__(self, worth):
        self.worth = worth

    @property
    @abstractmethod
    def type_factory(self,type):
        pass

眼镜和眼镜的例子:

from abc import ABCMeta, abstractmethod
import importlib
Enums = importlib.import_module('Enums')
Item = importlib.import_module('Item')

class Glasses(Item):
    __metaclas__ = ABCMeta

    def __init__(self,worth,type):
        super().__init__(worth)
       # self.type = self.type_factory()

    @property
    @abstractmethod
    def type_factory(self,type):
        if type == Enums.GlassesType.BLACK_SHADES:
            return BlackShades()
        # so on..

class BlackShades(Glasses):
    def __init__(self,worth):
        super().__init__(worth)

最好的方法是什么?我应该使用一个更好的工厂例子吗?也许最好使用类型类创建?

澄清一下:我并不只是想改进这段代码。我不介意使用正确的方法从头开始实现它,由于我缺乏Python经验,我不确定它是什么。

由于

0 个答案:

没有答案