从内部类访问父类变量?

时间:2015-11-25 01:48:35

标签: python inner-classes locust

我正在使用蝗虫,我正在模仿用户的行为。但是我在访问父类变量时遇到了麻烦。知道我怎么能通过吗?

return View(Model);

当我到达User.some_user时,我从来没有用户。

2 个答案:

答案 0 :(得分:1)

您尚未提供所有代码,但问题可能是get_user()在某处将some_user设置为实例属性,如{{1} }。

这只会为self.some_user = foo的特定实例设置some_user(因此对于Bob,Lisa,Beto,User53等),但不适用于User类本身。使用User访问some_user时,如self所示,您可以为执行这些语句的特定实例设置它,而不是类。在self.some_user,您正在访问类属性 updating(),而不是User.some_user这样的特定实例属性。为了更新class属性,默认情况下对usr53.some_user的所有实例都不变,您应该在User中使用User.some_user = foo进行设置。

现在在get_user()中,它正在尝试访问可能从未设置过的class属性。因为像path = "/posts/" + User.some_user这样的嵌套类无法访问它们被调用的嵌套类(UpdatingUser)的实例,User将无法访问任何UpdatingUser使用some_userself的任何其他实例属性进行设置。因此,解决方案是让User设置class属性而不是实例属性,如上一段所述。

答案 1 :(得分:0)

这个答案有点晚了,但是,如果有人遇到这个问题,则TaskSet具有一个parent属性,该属性可用于访问父级的实例变量。以下是我用于一次基本登录的内容:

class UserBehaviour(TaskSet):
    def on_start(self):
        self.token = self.login()
        self.headers = {'Authorization': 'Bearer ' + self.token}

    def login(self):
        with self.client.post("/login", catch_response = True) as response:
            return response.json()['token']

    @task
    class UserTask1(TaskSet):
        @task
        def get_data(self):
            self.client.get("/data", headers = self.parent.headers)

class WebsiteUser(HttpLocust):
    task_set = UserBehaviour