0

Pythonを学ぶためのミニゲームを書いています。main.py ファイルにインポートできる武器クラスを作成しました。

これが私が作ったクラスです:

class weapon(object):

    def __init__(self, name):
        self.weaponName = name

    def weaponStrength(self, level, strength):
        self.weaponLevel = level
        self.weaponStrength = strength
        damage = self.weaponStrength * level

        print "Damage is equal to %r" % damage

        return damage

武器クラスを使用して作成されるオブジェクトは次のとおりです。

# Creates an Object called sword using the weaponsClass
sword = weapon("sword")

# Calls a method of the weaponsClass to calculate weapon Strength. Returns a int
sword.weaponStrength(3, 20)

# Creates an Object called Magic Staff using the weaponsClass
magicStaff = weapon("Magic Staff")

# Calls a method of the weaponsClass to calculate weapon Strength. Returns a int
magicStaff.weaponStrength(5, 30)


# Sets a variable
swordStrength = sword.weaponStrength

# Sets a variable
magicStaffStrength = magicStaff.weaponStrength

# Prints the variable
print swordStrength

# Prints the variable
print magicStaffStrength

SwordStrength と magicStaffStrength がメソッドに渡された強度値と等しい理由を理解しようとしています。

どんな助けでも大歓迎です。

ありがとう。

4

2 に答える 2

6

名前空間でweaponStrengthを上書きしていweaponます:

self.weaponStrength = strength

def weaponStrength(...):

実際に対立しています。命名規則について考えてみてください

于 2012-04-10T19:52:30.247 に答える
0

このメソッドは、次の 2 つのことを試みています。

WeaponLevel と WeaponStrength の保存

ダメージの計算と返却

setWeaponLevelAndStrength最初の目的は関数を次のように呼び出す必要があることを示唆し、2番目の目的はそれを呼び出す必要があることを示唆しているため、これは悪い設計だと思いますcalculateDamageweaponStrengthその名前の属性も持ちたい場合は、明らかにひどい名前の選択です

def weaponStrength(self, level, strength):
    self.weaponLevel = level                #first purpose
    self.weaponStrength = strength          #first purpose
    damage = self.weaponStrength * level    #second purpose

    print "Damage is equal to %r" % damage  #second purpose

    return damage

メソッドを2つに分割することをお勧めします

def setWeaponLevelAndStrength(self, level, strength):
    self.weaponLevel = level
    self.weaponStrength = strength

def calculateDamage(self)
    damage = self.weaponStrength * self.weaponLevel

    print "Damage is equal to %r" % damage

    return damage
于 2012-04-10T20:19:41.247 に答える