Статические методы в Python?

Эти люди разработали метод отпечатки пальцев для распознавания пользователя с высоким уровнем точности:

https://panopticlick.eff.org/static/browser-uniqueness.pdf

Мы исследуем степень, в которой современные веб-браузеры подвергаются «отпечатку пальца устройства» через информацию о версии и конфигурации, которую они будут передавать на веб-сайты по запросу. Мы реализовали один возможный алгоритм отпечатка пальца и собрали эти отпечатки пальцев из большого набора браузеров, которые посетили нашу тестовую сторону, panopticlick.eff.org . Мы заметили, что распределение нашего отпечатка пальца содержит не менее 18,1 бит энтропии, а это означает, что если мы выбираем браузер случайным образом, в лучшем случае мы ожидаем, что только один из 286 777 других браузеров поделится своим отпечатком. Среди браузеров, поддерживающих Flash или Java, ситуация хуже, причем средний браузер имеет не менее 18,8 бит идентификационной информации. 94.2% браузеров с Flash или Java были уникальными в нашем примере.

Наблюдая за возвращающимися посетителями, мы оцениваем, как быстро отпечатки пальцев браузера могут со временем меняться. В нашем примере отпечатки пальцев изменились довольно быстро, но даже простая эвристика, как правило, могла угадать, когда отпечаток пальца был «обновленной» версией ранее обнаруженного отпечатка пальца браузера, с 99,1% догадок правильной и ложной положительной скоростью всего 0,86% .

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

blockquote>

1588
задан BartoszKP 5 June 2014 в 20:12
поделиться

3 ответа

Да, используя декоратор статического метода

class MyClass(object):
    @staticmethod
    def the_static_method(x):
        print(x)

MyClass.the_static_method(2)  # outputs 2

Обратите внимание, что некоторый код может использовать старый метод определения статического метода, используя staticmethod как функцию, а не как декоратор. Это следует использовать только в том случае, если вам необходимо поддерживать древние версии Python (2.2 и 2.3)

class MyClass(object):
    def the_static_method(x):
        print(x)
    the_static_method = staticmethod(the_static_method)

MyClass.the_static_method(2)  # outputs 2

. Это полностью идентично первому примеру (используется @staticmethod ), просто не используется синтаксис nice decorator

Наконец, используйте staticmethod () экономно! В Python очень мало ситуаций, когда необходимы статические методы, и я видел, как они много раз использовались, когда отдельная функция «верхнего уровня» была бы более понятной.


Ниже дословно из документации: :

Статический метод не получает неявный первый аргумент. Чтобы объявить статический метод, используйте эту идиому:

 class C:
 @staticmethod
 def f (arg1, arg2, ...): ...

Форма @staticmethod является декоратором функции - подробности см. В описании определений функций в Определения функций .

Его можно вызывать любым классом (например, Cf () ) или в другом случае (например, C (). F () ). Экземпляр игнорируется, за исключением его класса.

Статические методы в Python аналогичны тем, которые встречаются в Java или C ++. Для более продвинутой концепции см. classmethod () .

Для получения дополнительной информации о статических методах см. Документацию по стандартной иерархии типов в Стандартная иерархия типов .

Новое в версии 2.2.

Изменено в версии 2.4: добавлен синтаксис декоратора функций.

1950
ответ дан 22 November 2019 в 20:13
поделиться

Да, посмотрите декоратор статического метода :

>>> class C:
...     @staticmethod
...     def hello():
...             print "Hello World"
...
>>> C.hello()
Hello World
78
ответ дан 22 November 2019 в 20:13
поделиться

Вам не нужно использовать декоратор @staticmethod . Просто объявите метод (не ожидающий параметра self) и вызовите его из класса. Декоратор доступен только в том случае, если вы хотите иметь возможность вызывать его также из экземпляра (что не было тем, что вы хотели делать)

В основном вы просто используете функции ...

50
ответ дан 22 November 2019 в 20:13
поделиться
Другие вопросы по тегам:

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