Можно ли «шагнуть» в метод, чтобы вносить изменения при необходимости - PullRequest
0 голосов
/ 08 декабря 2011

Я работаю над скриптом Python, который обращается к ряду веб-сайтов. Я не думаю, что написание целого класса для каждого веб-сайта является выполнимым вариантом, поэтому я ищу способ сократить код и использовать его как можно больше и писать его максимально эффективно. Хотя веб-сайт использует один и тот же или похожий механизм (например, Wordpress), они часто отличаются незначительными деталями, такими как имена файлов cookie, измененные пути URL (например, example.com/signin.php и example2.com/login.php), имена данных и значения для POST-запросы и т. Д.

В большинстве случаев я мог бы использовать переменные, но иногда мне нужно найти дополнительные данные из полученного URL в середине метода, чтобы продолжить, что означает добавление нескольких строк кода, которые необходимо обработать перед продолжением. Я обнаружил, что теоретически возможным решением для меня может быть использование суперклассов. Но я не смог найти никакой информации о том, как на самом деле «войти» в метод внесения изменений. Чтобы лучше проиллюстрировать мою точку зрения, взгляните на этот пример

class Wordpress(object):
    def login(self):
        # Do some stuff here


    def newentry(self):
        # Code to check if I'm logged in code
        # and do bunch of other stuff
        #
        # Retrieve a page that *** sometimes contain important information 
        # in which case must be processed to continue! ***
        data = {'name'  : title,
                'message' : message,
                'icon' : iconid}
        # Post new entry here

Как я уже прокомментировал в приведенном выше примере, в некоторых случаях мне нужно выполнить настройку непосредственно внутри самого метода, добавить фрагмент кода или изменить значение переменной или значение в словаре и т. Д. Как я могу этого добиться? , если это вообще возможно? Может быть, мое восприятие суперклассов далеко, и они на самом деле не такие, как я думаю.

Может быть, есть другой способ, о котором я не думал. Не стесняйтесь размещать свои собственные идеи, как бы вы решили эту проблему. Я с нетерпением жду ваших ответов. Спасибо.

1 Ответ

1 голос
/ 08 декабря 2011

Почему вы не можете просто вызвать некоторую функцию process из метода main, процесс может делать все, что вы хотите, и вы даже можете переопределить ее в производных классах, например,

class WordPress(object):
    def newentry(self):
        data = get_data()
        data = process_data(data)

        # do moe generi cthings

    def process_data(self):
        return data
...