我目前正在尝试个人项目以提高我的oop能力。基于我玩的游戏,我无法为损伤建模程序创建良好的类结构。
具体来说,我觉得我很难编写子类的太多方面。我已将问题简化为以下内容。我有一个名为gun的超类,其中包含游戏中任何枪支的基本元素。
class gun():
def __init__(self,critc,maxa):
self.critc = critc
self.maxa = maxa
self.currentmag = maxa
def shoot(self):
self.currentmag -= 1
现在我想创建一个特定的枪类而不实际实例化它。我的理由是,如果有100种类型的枪支,并非所有枪支子类都需要同时实例化。但是,我的所有枪类子类定义看起来非常相似,只有特定值的微小变化。是否有一种通用/简单的方法来清理它?
class gun1(gun):
def __init__(self):
self.critc = 10
self.maxa = 20
class gun2(gun):
def __init__(self):
self.critc = 11
self.maxa = 25
我想找到类似的东西:
class gun1(gun(10,11))
哪个实际上不可用,但很好地封装了我想要的内容。也就是说,使每个子类的定义简短,简洁,而不是多余。在上面的例子中,10是critc变量,11是maxa变量。
任何帮助将不胜感激,谢谢!
答案 0 :(得分:0)
根据Jakub已经说明的内容,您可以复制class
并在不实例化的情况下更改其属性。
>>> class Gun():
... critc = 0
... maxa = 0
... def __init__(self, critc=None, maxa=None):
... if critc:
... self.critc = critc
... if maxa:
... self.maxa = maxa
... self.currentmag = maxa
... def shoot(self):
... self.currentmag -= 1
...
>>> Kalashnikov = Gun
>>> Kalashnikov.critc = 15
>>> Kalashnikov.maxa = 40
>>> k = Kalashnikov(15, 40)
>>> k
<__main__.Gun instance at 0x7fcc0f482200>
>>> k.shoot()
>>> k.maxa
40
>>> k.currentmag
39
>>> AK47 = Gun
>>> AK47.critc = 30
>>> AK47.maxa = 30
>>> a = AK47()
>>> a.critc
30