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一样。