#python-3.x
#python-3.x
Вопрос:
Я пишу класс Person
на Python 3.8. Когда я использую calc_all()
метод для вычисления дохода для каждого экземпляра в instances
, я получаю ошибку. Код:
import math
class Person:
instances = []
@classmethod
def __init__(self, name, age):
self.name = name
self.age = age
self.level = 1
self.job = ""
self.work_place = None
Person.instances.append(self)
def do_level(self,income):
return income*math.sqrt(self.level*self.work_place.level)
def calc_income(self):
pass
def calc_life_cost(self):
pass
def calc(self):
income = self.calc_income()
cost = self.calc_life_cost()
return self.do_level(income) - cost
@staticmethod
def calc_all():
zigma = 0
for instance in Person.instances:
zigma = zigma instance.calc()
return zigma
p = Person('X',12)
p2 = Person('Y',15)
print(Person.calc_all())
Ошибка:
zigma = zigma instance.calc() TypeError: calc() missing 1 required positional argument: 'self'
Комментарии:
1. Какой смысл имеет строка
Person.instances.append(self)
. Правильно ли он добавляется???2. Вы хотите добавить имя, возраст и т.д. В список экземпляров????
3. @Arpit Я не уверен в своем коде, но когда я его распечатаю:
[<__main__.Person object at 0x000001F4C094E488>, <__main__.Person object at 0x000001F4C094E4C8>]
Мне нужен список всех объектов person4. Что вы в основном хотите добавить в свой список экземпляров???
5. @Arpit каждый объект person, который я создаю
Ответ №1:
Чего вы пытаетесь достичь, создавая __init__
classmethod? Вы могли бы свободно удалить его. После этого у вас все равно будет ошибка, поскольку self.work_place
не имеет уровня атрибута.
Комментарии:
1. Я воспроизвел ваш код и получаю ошибку реализации, вам следует добавить реализации для
calc_income
иcalc_life_cost
, приветствия. И удалите@classmethod
из__init__
, вам это не нужно.2. Проблема заключалась в @classmethod, спасибо