Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用通过函数返回的类?_Python_Python 2.7 - Fatal编程技术网

Python 如何使用通过函数返回的类?

Python 如何使用通过函数返回的类?,python,python-2.7,Python,Python 2.7,如果我有一个类为基于文本的RPG生成项目,就像这样——请记住这是我使用的代码的简化版本: from random import choice, randint class Weapon(object): def __init__(self, name, value, damage): self.name = name self.value = value self.damage = damage class CreateWeapon(

如果我有一个类为基于文本的RPG生成项目,就像这样——请记住这是我使用的代码的简化版本:

from random import choice, randint

class Weapon(object):
    def __init__(self, name, value, damage):
        self.name = name
        self.value = value
        self.damage = damage


class CreateWeapon(object):
    def __init__(self):
        self.prefix = ['rusty', 'polished', 'blessed']
        self.weaponType = ['long sword', 'halberd', 'axe']

    def generate(self):
        weaponName = choice(self.prefix) + ' ' + choice(self.weaponType)
        print weaponName

        if weaponName[0] == 'r':
            weaponDamage = randint(5, 20)

        else:
            weaponDamage = randint(20, 40)

        weaponValue = randint(1, weaponDamage * 3)
        return Weapon(weaponName, weaponValue, weaponDamage)
我的问题是:如何通过CreateWearm类的
generate()
方法操作我创建的武器对象?例如,如果我有一个具有库存属性的玩家类:

class Player(object):
    def __init__(self):
        self.inventory = {'weapons': []}

    def addWeaponDrop(self):
        createweapon = CreateWeapon()
        createweapon.generate()
        print 'What do?' 
        """self.inventory['weapons'].append()"""

player = Player()
。。。我调用player方法
addWeaponDrop()
来创建一个随机武器,如何将该武器对象添加到玩家的库存中?感谢您的帮助。

generate()
返回一个武器实例,您只需将其附加到库存中即可

weapon = createweapon.generate()
self.inventory['weapons'].append(weapon)
但我必须说,我不认为CreateLandware应该是一个类。课程是为了东西——即武器本身
generate
应该是武器上的一个classmethod。

generate()
返回一个武器实例,您只需将其附加到库存中即可

weapon = createweapon.generate()
self.inventory['weapons'].append(weapon)

但我必须说,我不认为CreateLandware应该是一个类。课程是为了东西——即武器本身<代码>生成应该是武器上的一个类方法。

生成函数返回武器。您只需要分配它(或直接存储它)

e、 g

或者直接储存

self.inventory['weapons'].append(CreateWeapon.generate())

生成函数返回一个武器。您只需要分配它(或直接存储它)

e、 g

或者直接储存

self.inventory['weapons'].append(CreateWeapon.generate())

一般来说,给一个类一个动词作为名称意味着你做了错误的设计选择。正如下面所建议的,如果您不需要复杂的
武器工厂
,您可以将逻辑作为替代构造函数移动到类方法中。通常,给类一个动词作为名称表示您做出了错误的设计选择。正如下面所建议的,如果您不需要复杂的
武器工厂
,您可以将逻辑作为替代构造函数移动到类方法中。