Импортировать код прямо в скрипт с Python? - PullRequest
1 голос
/ 28 ноября 2010

Я занимаюсь разработкой приложения PyQT4, и мне становится довольно сложно перемещаться по всему коду сразу. Я знаю оператор import foo, но не могу понять, как заставить его импортировать кусок кода напрямую в мой скрипт, например, оператор BASH source foo.

Я пытаюсь сделать это:

# File 'functions.py'

class foo(asd.fgh):
  def __init__(self):
    print 'foo'

Вот второй файл.

# File 'main.py'

import functions

class foo(asd.fgh):
  def qwerty(self):
    print 'qwerty'

Я хочу включить код или замедлить слияние классов из двух отдельных файлов. В PHP есть import_once('foo.php'), и, как я упоминал ранее, BASH имеет source 'foo.sh', но можно ли это сделать с помощью Python?

Спасибо!

Ответы [ 3 ]

4 голосов
/ 28 ноября 2010

По какой-то причине моей первой мыслью было множественное наследование. Но почему бы не попробовать нормальное наследование?

class foo(functions.foo):
    # All of the methods that you want to add go here.

Есть ли какая-то причина, по которой это не сработает?


Поскольку вы просто хотите объединить определения классов, почему бы вам не сделать это:

# main.py
import functions

# All of the old stuff that was in main.foo is now in this class
class fooBase(asd.fgh):
    def qwerty(self):
        print 'qwerty'

# Now create a class that has methods and attributes of both classes
class foo(FooBase, functions.foo): # Methods from FooBase take precedence
    pass

или

class foo(functions.foo, FooBase): # Methods from functions.foo take precedence      
    pass

Это позволяет использовать возможности питонов для множественного наследования для создания нового класса с методами из обоих источников.

3 голосов
/ 28 ноября 2010

Вы хотите execfile(). Хотя вы на самом деле этого не делаете, с тех пор как вы переопределяете класс, вы ... переопределяете его.

0 голосов
/ 28 ноября 2010

исправление обезьян в python не работает почти так же. Обычно это считается плохой формой, но если вы все равно хотите это сделать, вы можете сделать это:

# File 'functions.py'

class foo(asd.fgh):
  def __init__(self):
    print 'foo'

импортированный модуль остается без изменений. В модуле импорта мы делаем все по-другому.

# File 'main.py'

import functions

def qwerty(self):
  print 'qwerty'

functions.foo.qwerty = qwerty

Обратите внимание, что нет дополнительного определения класса, просто голая функция. Затем мы добавляем функцию в качестве атрибута класса.

...