Issue #53 resolved

Проблема с наследованием класса Grab

Anonymous created an issue

Вот этот корректный казалось бы код

from grab import Grab

class CustomGrab(Grab): def init(self): pass

валится со следующей ошибкой

Traceback (most recent call last): File "CustomGrab.py", line 3, in <module> class CustomGrab(Grab): File "/Library/Python/2.7/site-packages/grab-0.4.5-py2.7.egg/grab/extension.py", line 21, in new handlers = dict((x, []) for x in namespace['extension_points']) KeyError: 'extension_points'

Почему я не могу наследовать этот класс?

Comments (4)

  1. lorien repo owner

    Потому что к классу Grab присоединён метакласс который составляет для известных точек расширения список функций из классов-расширений, которые работают с этими точками. Вам нужно продублировать в своём классе наследнике аттрибут extension_points (а также другие, если необходимо). Или вариант 2: пофиксить метакласс, так чтобы он искал extension_points аттрибут в супер-классах.

    Кстати, даже если рассматривать проблему с метаклассом, ваш код не совсем корректен т.к. вы переопределяете метод init, который есть в супер-классе и который принимает всякие разные аргументы и делает всякие разные действия.

  2. Sergey Krasnov

    Не совсем понял что вы имеете ввиду. Извините за совсем минимальный код. Моя идея была в следующем:

    from grab import Grab
    
    class CustomGrab(Grab):
    	def __init__(self):
    		# some important stuff here
    		super(CustomGrab, self).__init__()
    		
    	def go(url):
    		# some important stuff here
    		super(CustomGrab, self).go(url)
    

    Не могли бы вы, пожалуйста, объяснить что именно мне нужно сделать с аттрибутом extension_points, чтобы переопределить метод go?

  3. Log in to comment