我在最近几个小时试图解决以下问题但是没有成功。
我有两个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