Python 从内部类访问父类变量?

Python 从内部类访问父类变量?,python,inner-classes,locust,Python,Inner Classes,Locust,我和蝗虫一起工作,我在模仿用户的行为。然而,我在访问父类变量时遇到了麻烦。你知道我怎么通过吗 class User(TaskSet): some_user = '' def on_start(self): self.get_user() def get_user(self): some_user = self.client.get...#gets user @task class UpdatingUser(TaskSet): def updati

我和蝗虫一起工作,我在模仿用户的行为。然而,我在访问父类变量时遇到了麻烦。你知道我怎么通过吗

class User(TaskSet):
  some_user = ''

  def on_start(self):
    self.get_user()

  def get_user(self):
    some_user = self.client.get...#gets user

  @task
  class UpdatingUser(TaskSet):
    def updating(self):
      path = "/posts/" + User.some_user

当我访问User.some\u User时,我从未拥有该用户。

您尚未提供所有代码,但问题可能是
get\u User()
正在将
some\u User
设置为某个地方的实例属性,如
self.some\u User=foo

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


现在在
path=“/posts/”+User.some_User
中,它试图访问可能从未设置过的class属性。由于像
updateinguser
这样的嵌套类无法访问从中调用它们的嵌套类(
User
)的实例,
updateinguser
将无法访问任何
设置为
self
User
的任何其他实例属性的用户
的任何
。因此,解决方案是让
get_user()
设置class属性,而不是上一段中描述的实例属性。

这个答案有点晚了,但是,如果有人有这个问题,则有一个
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

如果您没有调用
get\u user()
,为什么会设置
某些用户
?子类init方法需要调用超类的init方法,如果您正在设置它的话。可能会回答您的问题。get_用户在user类的on_start函数中被调用。这不是问题的重点@Nathanielford你有可能来自爪哇吗?Python内部类的作用域(静态和非静态)与Java的不同@Davidermann还有其他方法访问它吗?我更新了代码。有趣的是,内部类没有访问父类变量的权限?我知道Hocust启动类的方式是首先运行_start,这就是我设置变量的地方。但我不确定一旦它运行后如何访问它。@Beto,它确实可以访问父级的类变量(在我的回答中,我说的是属性而不是变量),但不能访问其实例变量。在您发布的代码中,您既没有将某个_用户设置为类变量,也没有将其设置为实例变量,而是将其设置为get_user函数作用域中的局部变量。记住我的回答,设置self.some用户设置实例变量,设置user.some用户设置类变量persistent通过所有实例。当您像第2行那样在任何方法之外设置某个_user时,它会自动成为一个类变量,就像您设置了user.some_user一样。