使用方法编辑*编辑类属性

时间:2013-07-21 03:40:42

标签: python python-3.x

对于模糊的问题,我们深表歉意。我正在重写它,所以我希望这会有所帮助。 我正在尝试编辑两个属性(字典):a和b。 b与(.8)直接相关。

class Fun:
    def __init__(self, name):
        self.name = name
        self.a = {1: ["a", 10]}
        self.b = {2: ["b", 8]}
    def change(self):
        for i in self.a:
            self.a[i][1] = math.floor(random.gauss(self.a[i][1]), 5)
        self.b = copy.deepcopy(self.a)
        for i in self.b:
            self.b[i][1] = math.floor(self.a[i][1] * 0.8)

当我通过一个改变a和b的循环时,它会运行一次,然后用

崩溃
"str" object has no attribute "a" 

如果它是调用它的函数(它可能是),请告诉我。 这是否应该根据当前值改变a和b每次迭代?

我希望这更清楚我所要求的是什么。

1 个答案:

答案 0 :(得分:2)

您正在创建本地变量sell_price,这不会影响cahnge_price函数之外的sell_price。

sell_price中返回change_price。明确地将change_price的返回值分配给sell_price以外。

def change_prices():
    for i in price:
        price[i][1] = math.floor(random.gauss(price[i][1], 5))
    sell_price = copy.deepcopy(price)
    for i in sell_price:
        sell_price[i][1] = math.floor(price[i][1] * .8)
    return sell_price

price = {1: ["Spices", 43], 2: ["Something else",50]}
sell_price = change_prices()

或者将sell_price声明为全局变量

def change_prices():
    global sell_price
    for i in price:
        price[i][1] = math.floor(random.gauss(price[i][1], 5))
    sell_price = copy.deepcopy(price)
    for i in sell_price:
        sell_price[i][1] = math.floor(price[i][1] * .8)

price = {1: ["Spices", 43], 2: ["Something else",50]}
sell_price = change_prices()