Python 带有JSON定位器类的引用文件

Python 带有JSON定位器类的引用文件,python,json,python-3.x,Python,Json,Python 3.x,我的主文件中有JSON数据,让我们调用main.py,它使用Selenium驱动程序: main.py def get_user_data(browser): browser.get(JSON_URL) user_data = json.loads(browser.find_element_by_tag_name('body').text) browser.back() return user_data 要从中获取值,我使用: name = user_data

我的主文件中有JSON数据,让我们调用main.py,它使用Selenium驱动程序:

main.py

def get_user_data(browser):
    browser.get(JSON_URL)
    user_data = json.loads(browser.find_element_by_tag_name('body').text)
    browser.back()
    return user_data
要从中获取值,我使用:

name = user_data['name']
这个很好用。这是一个更大的程序,我希望使用一个类将这些定位器放在另一个名为locators.py的文件中,因此如果定位器发生更改,我只需在一个地方进行更改:

locators.py

class UserDataLocators:
    NAME = user_data['name']
现在,由于未定义“用户数据”,上述操作失败。我喜欢这种方法,因为我在这个文件中的另一个类中有其他selenium定位器。这可能是一个超级简单的修复程序,但我如何才能使上述功能正常工作,以便在main.py文件中导入UserDataLocator并执行以下操作:

from locators import UserDataLocators

name = UserDataLocators.NAME
谢谢

更新1:

@maxhaz所以通过你所写的,它给了我一个想法,也许只是使用你的UserData类来解析一切,而不是仅仅存储定位器。基本上这就是我想要实现的。当其他模块与其交互时,用户_数据['name']将得到更新/更改。我希望将用户_数据存储在locators.py中,并能够访问它并与其他模块一起更新,每次更新后,每个模块都可以获得更新的数据

例如,locators.py将用户_数据设置为无,因为未启动浏览器。Main.py将是第一个与之交互的,并通过浏览器获取初始用户_数据['name']值。Module2.py还将从locators.py导入,并获得与main.py刚刚更新的相同的用户_数据。模块2将更新用户数据['name']。一旦发生这种情况,main.py和locators.py的新用户_数据['name']现在更新了吗

#locators.py

user_data = None

class UserData:
    def __init__(self, browser):
        self.browser = browser
        self.name = self.get_user_data()['name']

    def get_user_data(self):
        self.browser.get(JSON_URL)
        user_data = json.loads(browser.find_element_by_tag_name('body').text)
        browser.back()
        return user_data

#main.py
import locators

locators.user_data = UserData(browser).name

#module2.py
import locators

## do something here that modifies the actual user data that gets pulled ##

locators.user_data = UserData(browser).name

您可能希望在类中移动get_user_data函数:

定位器 类UserDataLocator: 定义初始自我,浏览器: self.browser=浏览器 self.name=self.get_user_数据['name'] def get_user_dataself: self.browser.getJSON_URL user_data=json.loadsbrowser.find_element_by_tag_name'body'。text 浏览器返回 返回用户数据 main.py 从定位器导入UserDataLocator name=UserDataLocatorsbrowser.name
谢谢你的回复。我更新了原来的问题。让我知道这是否有意义尽管你的代码更新1应该可以工作,但它可能不能充分利用这个类。另一种方法是添加user_数据作为类UserData的实例属性:self.user_data=self.get_user_data。每个类实例将有一个user_数据变量。