Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 14, 2016 15:48:59

ilnaz
Зарегистрирован: 2016-10-19
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Статические методы.

Можете объяснить назначение статических методов и свойств класса?

Офлайн

#2 Ноя. 14, 2016 16:38:41

izekia
От:
Зарегистрирован: 2008-07-19
Сообщения: 317
Репутация: +  12  -
Профиль   Отправить e-mail  

Статические методы.

ilnaz
рекомендую
в свое время зачитывался

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

как пример: реализация синглтона



Офлайн

#3 Ноя. 15, 2016 00:21:53

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Статические методы.

izekia
А чему тогда принадлежат классметоды?

Офлайн

#4 Ноя. 15, 2016 00:27:57

izekia
От:
Зарегистрирован: 2008-07-19
Сообщения: 317
Репутация: +  12  -
Профиль   Отправить e-mail  

Статические методы.

4kpt_IV
izekiaА чему тогда принадлежат классметоды?
это конструкторы, не надо тут)
точнее основное назначение, может быть я не знаю какого-то широкого применения этих методов для других целей, но видимо мне это было не нужно



Отредактировано izekia (Ноя. 15, 2016 00:33:06)

Офлайн

#5 Ноя. 15, 2016 00:47:55

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Статические методы.

Конструкторы чего?

Офлайн

#6 Ноя. 15, 2016 02:08:05

izekia
От:
Зарегистрирован: 2008-07-19
Сообщения: 317
Репутация: +  12  -
Профиль   Отправить e-mail  

Статические методы.

4kpt_IV
Конструкторы чего?
классметодом декорируются методы, которые как правило используются для альтернативного способа создания объекта данного класса, или я неправ?



Офлайн

#7 Ноя. 15, 2016 08:04:26

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Статические методы.

Нет. Не только. Ну и называть это конструкторами все же не корректно…

Офлайн

#8 Ноя. 15, 2016 08:10:33

izekia
От:
Зарегистрирован: 2008-07-19
Сообщения: 317
Репутация: +  12  -
Профиль   Отправить e-mail  

Статические методы.

4kpt_IV
Нет. Не только. Ну и называть это конструкторами все же не корректно…
я понимаю, что не совсем корректно, но я встречал их в основном в виде “перегруженных конструкторов”
Кста, приведи пример другого использования, просто даже интересно.



Офлайн

#9 Ноя. 15, 2016 08:24:23

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Статические методы.

Подсчет количества экземпляров класса. Это навскидку. Могу еще привести множество примеров из алхимии. Там вообще другое использование.

Офлайн

#10 Ноя. 15, 2016 08:30:18

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Статические методы.

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)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version