Как сохранить результаты одной функции в классе? - PullRequest
1 голос
/ 01 мая 2020

Итак, я создал два класса. Первый (myModel) имеет функцию, которая может рассчитывать доход с помощью функции «ForegntFinalIncome». Я упростил это для целей SO.

class myModel:
  """
  The earning growth model for individuals in the utopia 
  """
  def __init__(self, bias) :
    """
    :param bias: we will use this potential bias to explore different scenarios to the functions of gender and ethnicity

    :param b_0: the intercept of the model.\ 

    :param b_age: age at world creation

    :param b_education: similar. 

    :param b_gender: similar

    :param b_marital: marital status

    :param b_ethnic: similar

    :param b_industry: similar

    :param b_income: similar.
    """

    self.bias = bias # bias is a dictionary with info to set bias on the gender function and the ethnic function

  def predictFinalIncome( self, n, person ): 
    for i in range(n):
      n_income = n_income* i
    return n_income

Таким образом, этот класс принимает диктовку типа "Человек", например:

utopModel = myModel( { "gender": False, "ethnic": False } ) 
months = 12
plato = { "age": 58, "education": 20, "gender": 1, "marital": 0, "ethnic": 2, "industry": 7, "income": 100000 }
utopModel.predictFinalIncome(months,plato)

Поэтому моя цель - создать класс (Person) он может хранить в поле Служба Предиката () каждого объекта при каждом вызове этой функции, удаляя предыдущую. Это позволяет мне отслеживать человека и сохранять его прогнозируемые доходы при вызове функции.

Я хотел бы сохранить это значение в Человеке как доход.

class Person:
  """
  The attributes of a Person to build a person up, having their information in one place as it changes.
  """
  def __init__(self, bias) :
    """
    :param age: person's age

    :param education: person's years of education 

    :param gender: male or female

    :param marital: marital status

    :param ethnic: ethnicity

    :param industry: what sector of work

    :param income: salary
    """
  def age00(self, age):
    return age

  def age(self, age):
    return 

  def income00(self, income):
    return income

  def income(self, n, income):
    return 

  def __getitem__(self, item):
    return self.__dict__[item]

Ответы [ 2 ]

1 голос
/ 01 мая 2020

Я думаю, что здесь есть 2 решения:

  1. Вы пишете predictFinalIncome внутри Person. Когда вы вызываете метод predictFinalIncome, вы сохраняете значение дохода как свойство Person класса

  2. , передавая экземпляр Person в качестве параметра метода predictFinalIncome. И после расчета дохода вы используете этот экземпляр для сохранения. См. Ниже

def predictFinalIncome( self, n, specificPerson: Person ): 
    for i in range(n):
      n_income = n_income* i

    # new lines
    specificPerson.income += n_income #income updated
    specificPerson.age = ((specificPerson.age*12) + n)/12 # age updated

И когда вы звоните predictFinalIncome снаружи:

utopModel = myModel( { "gender": False, "ethnic": False } ) 
months = 12
specificPerson = Person(..something here..)
utopModel.predictFinalIncome(months,specificPerson)

Теперь ваш specificPerson экземпляр обновляет доход автоматически, когда вы звоните predictFinalIncome метод

0 голосов
/ 01 мая 2020

так что решение NimaNr (в ваших комментариях), вероятно, самое простое решение.

Если вы храните в классе myModel предикат finalFinalIncome (), вы захотите создать setter функция для переменной дохода вашего лица. Это выглядело бы так:

def setIncome(self, x):
    self.Income = x

То, что вы хотели бы сделать в вашем методе pregnetFinalIncome , - это вызов метода установки, который мы только что создали выше, со значением n_income, которое вы получили.

...