Как исправить ошибку атрибута в классе Python - PullRequest
1 голос
/ 04 мая 2019

Я только начинаю изучать классы Python, и мне интересно, почему в моем атрибуте "Weapons_condition" в этом классе возникает ошибка, из-за которой он не может получить доступ, например, к Weapon.name ().Я знаю, что в целом мне еще нужно многому научиться на уроках, поэтому извиняюсь, если это ошибка новичка.Любая помощь будет оценена.Также не уверен, почему половина моего кода отображается за пределами области реального кода ... я пишу это неправильно?


class Weapon:
    def __init__(self, name, type, damage, time, wear_rate):
        self.name = name
        self.type = type
        self.damage = damage
        self.wear_rate = wear_rate

    def weapon_condition(self):
        name = Weapon.name()
        damage = Weapon.damage()
        wear_rate = Weapon.wear_rate()
        time = Weapon.time()
        condition = time*wear_rate
        if condition >= damage * 0.8:
            return name + ' is in good condition.'
        elif 0.8 > condition >= 0.3:
            return name + ' needs work.'
        elif condition < 0.3:
            return name + 'is almost broken.'

sword_1 = Weapon('Bloodsword', 'sword', 48, 120, 0.16)

print(sword_1.name)
print(sword_1.type)
print(sword_1.damage)

print(Weapon.weapon_condition(sword_1))

Ответы [ 2 ]

1 голос
/ 04 мая 2019

weapon_condition - это метод экземпляра.Вы вызываете его в экземпляре (например, sword_1), а не в классе (например, Weapon).

Например: print(sword_1.weapon_condition()) будет делать именно то, что вы хотите, потому что теперь вывызов этого метода экземпляра для экземпляра с использованием обычного синтаксиса для вызова метода экземпляра для экземпляра.

Необходимо четко понимать, что такое класс, что такое экземпляр класса, что такое экземплярметод, и как эти вещи объявлены и использованы, по крайней мере, в вашем собственном коде.Вы не можете просто использовать класс и экземпляр взаимозаменяемо.Это не одно и то же.

1 голос
/ 04 мая 2019

Вы хотите создать экземпляр класса Weapon, а затем получить доступ к его атрибутам или методам, используя .attribute или .method().

Внутри методов вы хотите использовать self, а не имя класса.

class Weapon:
    def __init__(self, name, type, damage, time, wear_rate):
        self.name = name
        self.type = type
        self.damage = damage
        self.time = time
        self.wear_rate = wear_rate

    def weapon_condition(self):
        name = self.name # self not Weapon
        damage = self.damage # self not Weapon
        wear_rate = self.wear_rate # self not Weapon
        time = self.time # self not Weapon
        condition = time*wear_rate
        if condition >= damage * 0.8:
            return name + ' is in good condition.'
        elif 0.8 > condition >= 0.3:
            return name + ' needs work.'
        elif condition < 0.3:
            return name + 'is almost broken.'

sword_1 = Weapon('Bloodsword', 'sword', 48, 120, 0.16)

print(sword_1.name) # Print sword_1's attribute.
print(sword_1.type) # Print sword_1's attribute.
print(sword_1.damage) # Print sword_1's attribute.
print(sword_1.weapon_condition()) # Print the result returned by sword_1's method named 'weapon_condition'.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...