Как импортировать классы, определенные в __ init __. py

Такая операция должна быть возможной с Java 8 Stream, но она не обязательно может быть выполнена эффективно - например, вы не можете распараллеливать такую ​​операцию, как вы должны смотреть на элементы по порядку.

API не обеспечивает простой способ сделать это, но, пожалуй, самый простой способ - взять Stream.iterator(), обернуть Iterator, чтобы иметь «take-while», а затем вернитесь к Spliterator, а затем к Stream. Или, может быть, оберните Spliterator, хотя в этой реализации он больше не может быть разделен.

Вот непроверенная реализация takeWhile на Spliterator:

static <T> Spliterator<T> takeWhile(
    Spliterator<T> splitr, Predicate<? super T> predicate) {
  return new Spliterators.AbstractSpliterator<T>(splitr.estimateSize(), 0) {
    boolean stillGoing = true;
    @Override public boolean tryAdvance(Consumer<? super T> consumer) {
      if (stillGoing) {
        boolean hadNext = splitr.tryAdvance(elem -> {
          if (predicate.test(elem)) {
            consumer.accept(elem);
          } else {
            stillGoing = false;
          }
        });
        return hadNext && stillGoing;
      }
      return false;
    }
  };
}

static <T> Stream<T> takeWhile(Stream<T> stream, Predicate<? super T> predicate) {
   return StreamSupport.stream(takeWhile(stream.spliterator(), predicate), false);
}
92
задан scottm 24 February 2009 в 19:39
поделиться

4 ответа

  1. ' lib/ родительский каталог должен быть в sys.path.

  2. Ваш' lib/__init__.py' мог бы быть похожим на это:

    from . import settings # or just 'import settings' on old Python versions
    class Helper(object):
          pass
    

Тогда следующий пример должен работать:

from lib.settings import Values
from lib import Helper

Ответ на отредактированную версию вопроса:

__init__.py определяет, как Ваш пакет смотрит снаружи. Если необходимо использовать Helper в [1 110], тогда определяют Helper в другом файле, например, 'lib/helper.py'.

.
|   `-- import_submodule.py
    `-- lib
    |-- __init__.py
    |-- foo
    |   |-- __init__.py
    |   `-- someobject.py
    |-- helper.py
    `-- settings.py

2 directories, 6 files

команда:

$ python import_submodule.py

Вывод:

settings
helper
Helper in lib.settings
someobject
Helper in lib.foo.someobject

# ./import_submodule.py
import fnmatch, os
from lib.settings import Values
from lib import Helper

print
for root, dirs, files in os.walk('.'):
    for f in fnmatch.filter(files, '*.py'):
        print "# %s/%s" % (os.path.basename(root), f)
        print open(os.path.join(root, f)).read()
        print


# lib/helper.py
print 'helper'
class Helper(object):
    def __init__(self, module_name):
        print "Helper in", module_name


# lib/settings.py
print "settings"
import helper

class Values(object):
    pass

helper.Helper(__name__)


# lib/__init__.py
#from __future__ import absolute_import
import settings, foo.someobject, helper

Helper = helper.Helper


# foo/someobject.py
print "someobject"
from .. import helper

helper.Helper(__name__)


# foo/__init__.py
import someobject
70
ответ дан jfs 5 November 2019 в 13:49
поделиться

Вы просто вставляете их __ init __. py.

Так с test/classes.py тем, чтобы быть:

class A(object): pass
class B(object): pass

... и тест / __ init __. py быть:

from classes import *

class Helper(object): pass

можно импортировать тест и иметь доступ к A, B и Помощнику

>>> import test
>>> test.A
<class 'test.classes.A'>
>>> test.B
<class 'test.classes.B'>
>>> test.Helper
<class 'test.Helper'>
7
ответ дан Aaron Maenpaa 5 November 2019 в 13:49
поделиться

Да, это возможно. Вы могли бы также хотеть определить __all__ в __init__.py файлы. Это - список модулей, которые будут импортированы, когда Вы сделаете

from lib import *
1
ответ дан vartec 5 November 2019 в 13:49
поделиться

Редактирование, так как я неправильно понял вопрос:

Просто помещает Helper класс в __init__.py. Это отлично pythonic. Это просто чувствует себя странным, прибывая из языков как Java.

4
ответ дан Richard Levasseur 5 November 2019 в 13:49
поделиться
Другие вопросы по тегам:

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