Найти - Пользователи
Полная версия: перегрузка класса
Начало » Python для новичков » перегрузка класса
1
lobster
Всех приветствую!
понадобилось распарсить xml файл, при помощи Expat, в стандартной доке пример применения:
import xml.parsers.expat

# 3 handler functions
def start_element(name, attrs):
print 'Start element:', name, attrs
def end_element(name):
print 'End element:', name
def char_data(data):
print 'Character data:', repr(data)

p = xml.parsers.expat.ParserCreate()

p.StartElementHandler = start_element
p.EndElementHandler = end_element
p.CharacterDataHandler = char_data

p.Parse("""<?xml version="1.0"?>
<parent id="top"><child1 name="paul">Text goes here</child1>
<child2 name="fred">More text</child2>
</parent>""", 1)
так вот, у меня вопрос, можно ли перегрузить класс ParseCreate(), и чтобы было типа как в модуле HTMLParser, на что то вроде:
# create a subclass and override the handler methods
class MyParser(xml.parsers.expat.ParserCreate()):
def __init__(self):
path = ""
def StartElementHandler(self, tag, attrs):
print tag
# instantiate the parser and fed it some HTML

parser = MyParser()
parser.Parse(out)
Здесь у меня выскакивает ошибка
Traceback (most recent call last):
File "D:\doorways\seo.py", line 13, in <module>
class MyParser(xml.parsers.expat.ParserCreate()):
TypeError: Error when calling the metaclass bases
cannot create 'pyexpat.xmlparser' instances
Для продолжения нажмите любую клавишу . . .
lobster
а это и не класс вовсе
from HTMLParser import HTMLParser
from xml.parsers.expat import ParserCreate
print type(HTMLParser)
print type(ParserCreate)

output:
<type 'classobj'>
<type 'builtin_function_or_method'>
получилось сделать вот так:
from xml.parsers.expat import ParserCreate

class MyParser:
def __init__(self):
self.p = ParserCreate()
self.p.StartElementHandler = self.start_element

def start_element(self, tag, attrs):
print tag

def feed(self, data):
self.p.Parse(data, 1)

# instantiate the parser and fed it some HTML

parser = MyParser()
parser.feed(data)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB