Python 重命名外部模块类方法 问题:

Python 重命名外部模块类方法 问题:,python,python-3.x,selenium,class,methods,Python,Python 3.x,Selenium,Class,Methods,如何重命名导入的模块类中存在的方法(函数) 总体思路: #当前通用代码 从模块导入myImportedClass X=myImportedClass。一些非常长的方法名存在(*args)。另一个方法(*args) #代码变短 X=myImportedClass.SVLM(*args.AM(*args) 具体示例: 我有几个可以工作的网页抓取脚本,但我想用PEP8风格重写一长串代码。我反复遇到的一个问题是详细的方法名(特别是来自SeleniumWebDriver模块),这是一个导入的模块类 下面

如何重命名导入的模块类中存在的方法(函数)

总体思路:

#当前通用代码
从模块导入myImportedClass
X=myImportedClass。一些非常长的方法名存在(*args)。另一个方法(*args)
#代码变短
X=myImportedClass.SVLM(*args.AM(*args)
具体示例: 我有几个可以工作的网页抓取脚本,但我想用PEP8风格重写一长串代码。我反复遇到的一个问题是详细的方法名(特别是来自SeleniumWebDriver模块),这是一个导入的模块类

下面是我想做的事情的摘录。然而,在搜索之后,我不确定如何达到这个目的。我是否需要在Python脚本中编写某种本地类/函数,使别名的行为与原始方法名类似

#具有长导入类方法名称的当前示例
从selenium导入webdriver
d=webdriver.Firefox()
def加载作业卡(计数器、作业密钥、作业类型、文件项='newjobs'):
posts=d.find_elements_by_xpath(//div[@class='row result clickcard']))
job_names=[j.find_element_by_css_选择器(“a[class='turnstileLink'])。在posts中获取j的属性('title')]
#…更多代码。。。
#希望重命名导入的类方法,例如:
def加载作业卡(计数器、作业密钥、作业类型、文件项='newjobs'):
posts=d.find_elements_by_xpath(//div[@class='row result clickcard']))
job_names=[j.fcss([class='turnstileLink']]).ga('title'),代表j-in-posts]
#…更多代码。。。
为供参考,导入的WebDriver类方法记录在以下脚本中:


我不知道如何重命名,但在这里使用函数指针只需一个小技巧即可, 将完整函数存储在变量中,然后调用新函数

newFunName =  Package.Module.Function 
newFunName()
我希望这对你有帮助

from module import myImportedClass
def do(ar) myImportedClass.some_very_long_method_name_that_exists(ar).another_method(ar)
代码调用变得更短,如下所示

X = do(**args)

我不知道如何重命名,但在这里使用函数指针只需一个小技巧即可, 将完整函数存储在变量中,然后调用新函数

newFunName =  Package.Module.Function 
newFunName()
我希望这对你有帮助

from module import myImportedClass
def do(ar) myImportedClass.some_very_long_method_name_that_exists(ar).another_method(ar)
代码调用变得更短,如下所示

X = do(**args)

您可以从
myImportedClass
继承并定义新方法:

class MyNewClass(myImportedClass):
    def SVLM(self, *args):
        return self.another_method(args)
那你就可以了

from some_module import MyNewClass

MyNewClass(ARGS).SVLM(ARGS2)
根据您的示例,请注意,
find\u element\u by\u css\u selector
WebDriver
的方法,而
get\u attribute
WebElement
的方法,因此您需要更新两个类

但是!如果您真的需要缩短行数,提高代码的可读性,不要急于这样做。新的类和方法名称可能会使使用/维护您的代码的人感到困惑

我建议您只需修改代码,如下所示:

post_locator = "xpath", "//div[@class='  row  result clickcard']"
link_locator = "css", "a[class='turnstileLink']"

def load_job_cards(counter, job_key, job_type, filestem='newjobs'):

    posts = d.find_elements(*post_locator)
    job_names = [j.find_element(*link_locator).get_attribute('title') for j in posts]

请注意,将元素定位器与执行代码分离是PageObject模式的基础,因此它不会是多余的

您可以继承自
myImportedClass
并定义新方法:

class MyNewClass(myImportedClass):
    def SVLM(self, *args):
        return self.another_method(args)
那你就可以了

from some_module import MyNewClass

MyNewClass(ARGS).SVLM(ARGS2)
根据您的示例,请注意,
find\u element\u by\u css\u selector
WebDriver
的方法,而
get\u attribute
WebElement
的方法,因此您需要更新两个类

但是!如果您真的需要缩短行数,提高代码的可读性,不要急于这样做。新的类和方法名称可能会使使用/维护您的代码的人感到困惑

我建议您只需修改代码,如下所示:

post_locator = "xpath", "//div[@class='  row  result clickcard']"
link_locator = "css", "a[class='turnstileLink']"

def load_job_cards(counter, job_key, job_type, filestem='newjobs'):

    posts = d.find_elements(*post_locator)
    job_names = [j.find_element(*link_locator).get_attribute('title') for j in posts]

另请注意,将元素定位器与执行代码分离是PageObject模式的基础,因此它不会是多余的

基于@Ashish Kamble对函数指针的建议,我为我的具体案例找到了一些解决方案。我仍然没有弄清楚如何重命名函数以继承现有web元素上的原始class.method属性,例如
j.fcss(“a[class='turnstileLink']”).ga('title')

但是,使用另一个函数解决原始问题时,我得到:

从selenium导入webdriver
d=webdriver.Firefox()
def find_css(元素,css):
返回元素。通过css选择器(css)查找元素
def加载作业卡(计数器、作业密钥、作业类型、文件项='newjobs'):
posts=d.find_elements_by_xpath(//div[@class='row result clickcard']))
#用新函数打破长线
css=“a[class='turnstileLink']”
job_names=[find_css(j,css)。在posts中获取j的属性('title')]
#这也很有用的其他代码
companys=[find_css(c,“span[class='company']”)。文章中c的文本]
locations=[find_css(l,“span[class='location']”)。posts中l的文本]
job_names=[slvm2(j,css,ga)表示帖子中的j]
#备选方案1
def find_css(元素,css):
返回元素。通过css选择器(css)查找元素
def ga(元素、属性):
返回元素。获取_属性(属性)
def加载作业卡(计数器、作业密钥、作业类型、文件项='newjobs'):
posts=d.find_elements_by_xpath(//div[@class='row result clickcard']))
css=“a[class='turnstileLink']”
job_names=[ga(在帖子中查找j的css(j,css),'title')]
#Alt解决方案2(不太通用)
def SVLM(j、css、ga):
返回j.find\u element\u by_css\u选择器(css)。获取属性(ga)
def加载作业卡(计数器、作业密钥、作业类型、文件项='newjobs'):
posts=d.find_elements_by_xpath(//div[@class='row result clickcard']))
css=“a[class='turnstileLink']”
职位名称=[SVLM(j,css,'title'),代表职位中的j]

基于@Ashish Kamble对函数指针的建议,我为我的具体案例找到了一些解决方案。我仍然没有弄清楚如何重命名函数以继承现有web元素上的原始class.method属性,例如
j.fcss(“a[class='turnstileLink']”).ga('title')

但是,使用另一个函数解决原始问题时,我得到:

来自s的