@Blair Conrad сказал статические переменные, объявленные в определении класса, но не в методе, являются классом или "статическими" переменными:
>>> class Test(object):
... i = 3
...
>>> Test.i
3
существуют некоторые глюк здесь. Продолжение от примера выше:
>>> t = Test()
>>> t.i # "static" variable accessed via instance
3
>>> t.i = 5 # but if we assign to the instance ...
>>> Test.i # we have not changed the "static" variable
3
>>> t.i # we have overwritten Test.i on t by creating a new attribute t.i
5
>>> Test.i = 6 # to change the "static" variable we do it by assigning to the class
>>> t.i
5
>>> Test.i
6
>>> u = Test()
>>> u.i
6 # changes to t do not affect new instances of Test
# Namespaces are one honking great idea -- let's do more of those!
>>> Test.__dict__
{'i': 6, ...}
>>> t.__dict__
{'i': 5}
>>> u.__dict__
{}
Уведомление, как переменная экземпляра t.i
вышла из синхронизации со "статической" переменной класса, когда атрибут i
был установлен непосредственно на t
. Это вызвано тем, что i
было восстановление в t
пространство имен, которое отлично от Test
пространство имен. Если Вы хотите изменить значение "статической" переменной, необходимо изменить его в объеме (или объект), где оно было первоначально определено. Я поместил "статичный" в кавычки, потому что Python действительно не имеет статических переменных в том смысле, что C++ и Java делают.
, Хотя это не говорит ничего определенного относительно статических переменных или методов, , учебное руководство Python имеет немного релевантной информации о [1 111] классы и объекты класса .
@Steve Johnson также ответил относительно статических методов, также зарегистрированных под "Встроенными функциями" в Справочное руководство по библиотеке Python.
class Test(object):
@staticmethod
def f(arg1, arg2, ...):
...
@beid также упомянул classmethod, который подобен staticmethod. Первым аргументом classmethod является объект класса. Пример:
class Test(object):
i = 3 # class (or static) variable
@classmethod
def g(cls, arg):
# here we can use 'cls' instead of the class name (Test)
if arg > cls.i:
cls.i = arg # would the the same as Test.i = arg1
function disableLink(e) {
// cancels the event
e.preventDefault();
return false;
}
Если вы хотите отключить его, позвоните по телефону
$('#addlink').bind('click', disableLink);
Если вы хотите включить отключенную ссылку, вы позвоните по телефону
$('#addlink').unbind('click', disableLink);
$('#addlink').click(function(e) {
e.preventDefault();
//do other stuff when a click happens
});
return false;
предотвратит возникновение события по умолчанию и а также предотвратить всплытие события
Так что выбор между этими двумя зависит от вашего использования. Если вы хотите остановить действие по умолчанию, а также вам нужно всплыть по событию, используйте preventDefault
Я бы выбрал гибрид решения RaYell и Phoenix, добавив к нему пространство имен jQuery :
$('#addlink').bind('click.killlink',function(event){
event.preventDefault();
// You can do any additional onClick behavior here
});
Чтобы отвязать это событие, а также любые другие связанные события (любого типа), которые вы группируете с пространством имен .killink, вы должны запустить это:
$('#addlink').unbind('.killlink');
Как указал Феникс, использование return false
предотвратит всплытие события. preventDefault ()
имеет дополнительное преимущество, заключающееся в том, что он предельно явный (в отличие от return false
, который может означать много разных вещей в зависимости от контекста).