Найти - Пользователи
Полная версия: Статические методы.
Начало » Python для новичков » Статические методы.
1 2
ilnaz
Можете объяснить назначение статических методов и свойств класса?
izekia
ilnaz
рекомендую
в свое время зачитывался

вкратце если у Вас есть понимание чем отличается класс от объекта, то должно быть и понимание что такое свойства или методы принадлежащие именно классу, то есть статические

как пример: реализация синглтона
4kpt_IV
izekia
А чему тогда принадлежат классметоды?
izekia
4kpt_IV
izekiaА чему тогда принадлежат классметоды?
это конструкторы, не надо тут)
точнее основное назначение, может быть я не знаю какого-то широкого применения этих методов для других целей, но видимо мне это было не нужно
4kpt_IV
Конструкторы чего?
izekia
4kpt_IV
Конструкторы чего?
классметодом декорируются методы, которые как правило используются для альтернативного способа создания объекта данного класса, или я неправ?
4kpt_IV
Нет. Не только. Ну и называть это конструкторами все же не корректно…
izekia
4kpt_IV
Нет. Не только. Ну и называть это конструкторами все же не корректно…
я понимаю, что не совсем корректно, но я встречал их в основном в виде “перегруженных конструкторов”
Кста, приведи пример другого использования, просто даже интересно.
4kpt_IV
Подсчет количества экземпляров класса. Это навскидку. Могу еще привести множество примеров из алхимии. Там вообще другое использование.
FishHook
izekia
Кста, приведи пример другого использования, просто даже интересно.
Код из пакета setuptools
 class PackageFinder(object):
    @classmethod
    def find(cls, where='.', exclude=(), include=('*',)):
        """Return a list all Python packages found within directory 'where'
        'where' should be supplied as a "cross-platform" (i.e. URL-style)
        path; it will be converted to the appropriate local path syntax.
        'exclude' is a sequence of package names to exclude; '*' can be used
        as a wildcard in the names, such that 'foo.*' will exclude all
        subpackages of 'foo' (but not 'foo' itself).
        'include' is a sequence of package names to include.  If it's
        specified, only the named packages will be included.  If it's not
        specified, all found packages will be included.  'include' can contain
        shell style wildcard patterns just like 'exclude'.
        The list of included packages is built up first and then any
        explicitly excluded packages are removed from it.
        """
        out = cls._find_packages_iter(convert_path(where))
        out = cls.require_parents(out)
        includes = cls._build_filter(*include)
        excludes = cls._build_filter('ez_setup', '*__pycache__', *exclude)
        out = filter(includes, out)
        out = filterfalse(excludes, out)
        return list(out)
    @staticmethod
    def require_parents(packages):
        """
        Exclude any apparent package that apparently doesn't include its
        parent.
        For example, exclude 'foo.bar' if 'foo' is not present.
        """
        found = []
        for pkg in packages:
            base, sep, child = pkg.rpartition('.')
            if base and base not in found:
                continue
            found.append(pkg)
            yield pkg
    @staticmethod
    def _candidate_dirs(base_path):
        """
        Return all dirs in base_path that might be packages.
        """
        has_dot = lambda name: '.' in name
        for root, dirs, files in os.walk(base_path, followlinks=True):
            # Exclude directories that contain a period, as they cannot be
            #  packages. Mutate the list to avoid traversal.
            dirs[:] = filterfalse(has_dot, dirs)
            for dir in dirs:
                yield os.path.relpath(os.path.join(root, dir), base_path)
    @classmethod
    def _find_packages_iter(cls, base_path):
        candidates = cls._candidate_dirs(base_path)
        return (
            path.replace(os.path.sep, '.')
            for path in candidates
            if cls._looks_like_package(os.path.join(base_path, path))
        )
    @staticmethod
    def _looks_like_package(path):
        return os.path.isfile(os.path.join(path, '__init__.py'))
    @staticmethod
    def _build_filter(*patterns):
        """
        Given a list of patterns, return a callable that will be true only if
        the input matches one of the patterns.
        """
        return lambda name: any(fnmatchcase(name, pat=pat) for pat in patterns)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB