Python使用错误的默认值

时间:2018-03-22 08:55:36

标签: python class initialization default-value

我在最近几个小时试图解决以下问题但是没有成功。

我有两个python文件,一个用于创建类,另一个用于实际使用这些类。

我按如下方式创建了课程hh(=住户),但我们只关注fltCash属性,因为这是问题发生的地方;我只在代码底部使用了setter / getters这个属性,因为我希望它可以解决这个问题。

# agent: households
class hh(agent):
  def __init__(self, intId = 0,
             # Income
             fltCash = [100],
             fltWage = [25],
             fltInterest = [25],
             fltDividend = [25],
             fltTransfer = [25],

             # Employment
             intEmployerId = [-1],

             # MinWage Preferences
             fltIncomeweight = 1,
             fltLoyalty2Employer = [-1], 

             # Utility Function
             fltPref_a = 0.5,
             fltPref_b = 1,

             # Variables
             intMinWage = -1
             ):

    # def in superclass agent
    agent.__init__(self, intId)

    # def in childclass hh
    self.fltCash = fltCash
    self.fltWage = fltWage
    self.fltInterest = fltInterest
    self.fltDividend = fltDividend
    self.fltTransfer = fltTransfer
    self.intEmployerId = intEmployerId
    self.fltIncomeweight = fltIncomeweight
    self.fltLoyalty2Employer = fltLoyalty2Employer
    self.fltPref_a = fltPref_a
    self.fltPref_b = fltPref_b
    self.intMinWage = intMinWage

    ## Setter / Getter Section
    @property
    def fltCash(self):
        return self.__fltCash

    @fltCash.setter
    def fltCash(self, value):
        if value.isdigit():
            self.__fltCash = value
        else:
            print("Ungueltiger Wert fuer fltCash: {}".format(value))

在另一个文件中,我定义了我的主类,我在这个类中创建了一个对象。但是,在初始化之后,此对象的fltCash属性不包含仅具有默认值的列表,而是包含对我来说似乎是随机的各种整数的列表。

有没有人知道这种行为的原因和/或如何避免它?

任何帮助都将受到高度赞赏。

最佳

卢卡斯

编辑: 这是我的代码的简化版本,我认为这是我的代码中非常愚蠢的错误,但我找不到它:

import random as rd

class agent:
  def __init__(self, intId = 0):
    self.intId = intId

class hh(agent):
  def __init__(self, intId = 0, fltCash = [100]):

    # def in superclass agent
    agent.__init__(self, intId)

    # def in childclass hh
    self.fltCash = fltCash


class firm(agent):
   def __init__(self, intId = 0, fltCurrentAssets = [50]):

    # def in superclass agent
    agent.__init__(self, intId)

    # def in childclass hh
    self.fltCurrentAssets = fltCurrentAssets

def main(): 
  ### create agents
  luke = hh(intId=3)
  univie = firm(intId=2)

  ## HERE I'D EXPECT [100] AND [100]
  print(luke.fltCash)
  print(univie.fltCurrentAssets)

  ### action
  i = 0
  while True:
      fltTransfer = rd.randrange(0,51)

      if luke.fltCash[i] > univie.fltCurrentAssets[i]:
          luke.fltCash.append(luke.fltCash[i] - fltTransfer)
          univie.fltCurrentAssets.append(fltTransfer + univie.fltCurrentAssets[i])
      else:
          luke.fltCash.append(fltTransfer + luke.fltCash[i])
          univie.fltCurrentAssets.append(univie.fltCurrentAssets[i] - fltTransfer)
      i += 1

      if luke.fltCash[i] < 0 or univie.fltCurrentAssets[i] < 0:
          print("Game over! Luke: {}, \n Univie: {}".format(luke.fltCash,\
              univie.fltCurrentAssets))
          del luke
          del univie
          break
      if i > 10: 
          del luke
          del univie
          break

0 个答案:

没有答案