Как я расширяю модуль Python? Добавление новой функциональности к пакету 'Твиттера Python'

Каковы лучшие практики для расширения существующего модуля Python – в этом случае, я хочу расшириться python-twitter пакет путем добавления новых методов к основному классу API.

Я посмотрел на tweepy, и мне нравится этот также; я просто нахожу python-twitter легче понять и расшириться с функциональностью я хочу.

Мне уже записали методы – я пытаюсь выяснить большую часть Pythonic и наименее разрушительный способ добавить их в python-twitter модуль пакета, не изменяя ядро этих модулей.

18
задан fish2000 5 September 2018 в 17:52
поделиться

3 ответа

Несколько способов.

Простой способ:

Не расширяйте модуль, расширяйте классы.

exttwitter.py

import twitter

class Api(twitter.Api):
    pass 
    # override/add any functions here.

Оборотная сторона: каждый класс в твиттере должен быть в exttwitter.py, даже если это просто заглушка (как указано выше)

Более сложный (возможно, не питонический) способ:

Импорт * из python-twitter в модуль, который вы затем расширяете.

Например:

basemodule.py

 class Ball():
    def __init__(self,a):
        self.a=a
    def __repr__(self):
        return "Ball(%s)" % self.a

def makeBall(a):
    return Ball(a)

def override():
    print "OVERRIDE ONE"

def dontoverride():
    print "THIS WILL BE PRESERVED"

extmodule.py

from basemodule import *
import basemodule

def makeBalls(a,b):
    foo = makeBall(a)
    bar = makeBall(b)
    print foo,bar

def override():
    print "OVERRIDE TWO"

def dontoverride():
    basemodule.dontoverride()
    print "THIS WAS PRESERVED"

runscript.py

import extmodule

#code is in extended module
print extmodule.makeBalls(1,2)
#returns Ball(1) Ball(2)

#code is in base module
print extmodule.makeBall(1)
#returns Ball(1)

#function from extended module overwrites base module
extmodule.override()
#returns OVERRIDE TWO

#function from extended module calls base module first
extmodule.dontoverride()
#returns THIS WILL BE PRESERVED\nTHIS WAS PRESERVED

Я не уверен, что двойной импорт в extmodule.py питонический - вы можете удалить его, но тогда вы не обрабатываете вариант использования, когда хотите расширить функцию, которая была в пространстве имен базового модуля.

Что касается расширенных классов, просто создайте новый класс API (basemodule.API) для расширения модуля Twitter API.

21
ответ дан 30 November 2019 в 07:28
поделиться

Не добавляйте их в модуль. Подклассифицируйте классы, которые вы хотите расширить, и используйте свои подклассы в своем собственном модуле, не изменяя исходный материал вообще.

5
ответ дан 30 November 2019 в 07:28
поделиться

Могу я предложить здесь не изобретать Колесо заново? Я создаю Twitter-клиент со строкой> 6k в течение 2 месяцев, сначала я тоже проверил python-twitter, но он сильно отстает от последних изменений API. (по крайней мере, когда я последний раз проверял) нет поддержки OAuth / xAuth).

Итак, после небольшого поиска я обнаружил tweepy:
http://github.com/joshthecoder/tweepy

Плюсы: Активная разработка, OAauth / xAuth и обновление с API.
Скорее всего, все, что вам нужно, уже есть.

Так что я предлагаю пойти с этим, это работает для меня, единственное, что мне нужно было добавить, это xAuth (который получил слияние с tweepy :)

Ах, бессовестная вилка, если вам нужно разбирать твиты и / или отформатируйте их в HTML, используя мою версию python библиотек twitter-text- *:
http://github.com/BonsaiDen/twitter-text-python

Эта вещь unittestetd гарантированно анализирует твиты так же, как Twitter.com делает это.

2
ответ дан 30 November 2019 в 07:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: