Python str.find()重写Element.find(),如何规避?

GCh*_*orn 1 python

我正在编写一些使用Element.find()Python xml.etree.ElementTree模块中的方法的代码.但是,我发现只要我开始使用str.replace(),Python就会将我的调用解释object.find()str.find()而不是Element.find().

我需要我的代码Element从XML文件中获取各种对象的文本,在某些情况下我需要使用str方法修改它.如何在不改变解释器解释方式的情况下执行此操作object.find()?这是我的代码:

import xml.etree.ElementTree as xml
import re
import json

pattern = re.compile('[a-z,0-9,-]+')
c_pattern = re.compile('\[caption[^\]]+\]')
c2_pattern = re.compile('\[/caption\]')

tree = xml.parse('file.xml')
root = tree.getroot()

for item in root.iter('item'):
    if item.find('{http://wordpress.org/export/1.2/}post_type').text == 'post':
        t = item.find('{http://purl.org/rss/1.0/modules/content/}encoded').text
        print item.find
        try:
            t = t.encode('utf-8')

            o_cap = re.findall(c_pattern,t)
            e_cap = re.findall(c2_pattern,t)

            for item in o_cap:
                t = t.replace(item,'') 
            for item in e_cap:
                t = t.replace(item,'')           
        except:
            t = 'None'
        print item.find
        title = item.find('title').text
Run Code Online (Sandbox Code Playgroud)

第一个print语句返回<bound method Element.find of <Element 'item' at 0x2a7a7d0>>,而第二个返回<built-in method find of str object at 0x2b56e00>.

我已经尝试了子类化Element,但我不知道如何使Element我的XML文件中的节点成为新子类的对象.我也尝试过简单地定义一个引用该Element.find()方法的新方法,但是当我尝试使用它时,解释器只是告诉我一个Element对象没有一个按用户定义的方法名称的方法.

我想到的另一种方式是某种方式

from xml.etree.ElementTree import Element.find() as Element.some_other_name() 
Run Code Online (Sandbox Code Playgroud)

但这不起作用(我尝试了一堆语法变体,但它们也不起作用).有谁知道我可以/应该做些什么来解决这个问题?

sbe*_*rry 5

你正在破坏这个名字item.尝试将内循环中的变量名称切换为其他内容,例如poop.

for poop in o_cap:  
    t = t.replace(poop,'') 
for poop in e_cap:
    t = alvin.replace(poop,'')  
Run Code Online (Sandbox Code Playgroud)