lambda
в вашем примере образует закрытие. То есть, это вложенная функция, которая ссылается на объекты, доступные в охватывающей области. Каждая функция, которая создает замыкание, сохраняет объект ячейки для каждого элемента, который должен поддерживать ссылку.
В вашем примере lambda
создает замыкание со ссылками на локальные переменные self
и model
в рамках метода __init__
. Если вы где-нибудь ссылаетесь на lambda
, вы можете проверить все объекты ячейки его закрытия с помощью атрибута __closure__
. В вашем примере это будет выглядеть примерно так:
>>> print(func.__closure__)
(, )
| |
Если вы удалили все другие ссылки на объекты MyModel
и MyClass
, показанные здесь, те, которые хранятся в ячейках, все равно останутся. Поэтому, когда дело доходит до очистки объекта, вы всегда должны явно отключать все сигналы, связанные с функциями, которые могут образовывать замыкания по соответствующим объектам.
Обратите внимание, что когда дело доходит до соединений с сигналом / слотом, PyQt рассматривает обернутые слоты C ++ и методы экземпляра Python по-разному. Контрольные числа этих типов вызываемых не увеличиваются, когда они связаны с сигналами, тогда как lambdas, определенные функции, частичные объекты и статические методы. Это означает, что если все другие ссылки на последние типы вызываемых удаляются, любые оставшиеся сигнальные соединения будут поддерживать их. Отключение сигналов позволяет при необходимости собирать собранные связанные вызовы.
Единственное исключение из вышеперечисленного - методы класса. PyQt создает специальную оболочку при создании подключений к ним, поэтому, если все другие ссылки на них удаляются, и сигнал испускается, будет генерироваться исключение, например:
TypeError: 'managedbuffer' object is not callable
Вышеприведенное должно применяться к PyQt5 и большинству версий PyQt4 (4.3 и выше).
Я должен немного не согласиться с ответами Джона и Уотсона, так как ...
вопрос:
Выполняет ли упорядочение классов CSS в элементе DOM приоритет оператора?
blockquote>Что зависит от данного утверждения.
Заказ HTML не типично Материя
Следующие эквивалентны , когда дело доходит до прямого вызова класса (т.е.
.class1
или.class2
) или к комбинированному вызову (например,.class1.class2
или.class2.class1
):<div class="class1 class2"></div> <div class="class2 class1"></div>
Случаи, в которых утверждение Приоритет выше HTML может быть затронут на основе HTML-заказа
Основное место, где
Пример 1 Fiddle , используя следующий код для поиска в соответствии с / g6] не будет иметь никакого изменения цвета шрифта, и каждый
[f 2]div
будет иметь разные свойства из-за упорядочения классов:Пример 2 Fiddle , используя следующий код для поиска в начала значения атрибута , не будет иметь никакого изменения цвета шрифта для второго
div
, и каждыйdiv
будет иметь разные свойства из-за упорядочения классов:[class^="class1"] { color: red; } [class^="class1 class2"] { background-color: yellow; } [class^="class2 class1"] { border: 1px solid blue; }
Пример 3 Fiddle , используя следующий код для поиска конца конца значение атрибута НЕ будет иметь никакого изменения цвета шрифта для первого
div
, и каждыйdiv
будет иметь разные свойства из-за упорядочения классов:[class$="class1"] { color: red; } [class$="class1 class2"] { background-color: yellow; } [class$="class2 class1"] { border: 1px solid blue; }
Разъясняющее утверждение о " Приоритет "
Чтобы быть ясным, в вышеприведенных случаях, что затрагивается в отношении« приоритета утверждения », действительно зависит от того, применяется ли фактически действие или нет элемент. Но так как приложение или нет в некотором смысле, основной приоритет, и поскольку вышеприведенные случаи, когда такое приложение фактически основано на упорядочении классов на элементе HTML Dom (а не на присутствии или отсутствие класса), я подумал, что стоит добавить это в качестве ответа.
Возможно, допустимо использование порядка классов?
Это мысль, которая возникает у меня, на основе комментария BoltClock , Рассмотрим только два класса, которые используются для стилизации элементов, основанных на любых факторах, которые считаются критическими для разных стилей. Эти два класса теоретически могут заменить использование одиннадцати разных отдельных классов, используя комбинацию селекторов атрибутов (на самом деле, как будет отмечено позже, возможности практически безграничны с одним классом, но я обсужу это в тот момент, когда это пост - упорядочение нескольких классов). Для этих двух классов мы можем по-разному стилизовать элементы следующим образом:
Предполагая эти комбинации HTML
<div class="class1">Element 1</div> <div class="class2">Element 2</div> <div class="class1 class2">Element 3</div> <div class="class2 class1">Element 4</div>
Возможности CSS
/* simply has the class */ .class1 {} /* affects elements 1, 3, 4 */ .class2 {} /* affects elements 2-4 */ /* has only a single class */ [class="class1"] {} /* affects element 1 only */ [class="class2"] {} /* affects element 2 only */ /* simply has both classes */ .class1.class2 {} /* affects elements 3-4 */ /* has both classes, but in a particular order */ [class="class1 class2"] {} /* affects element 3 only */ [class="class2 class1"] {} /* affects element 4 only */ /* begins with a class */ [class^="class1"] {} /* affects elements 1 & 3 only */ [class^="class2"] {} /* affects elements 2 & 4 only */ /* ends with a class NOTE: that with only two classes, this is the reverse of the above and is somewhat superfluous; however, if a third class is introduced, then the beginning and ending class combinations become more relevant. */ [class$="class1"] {} /* affects elements 2 & 4 only */ [class$="class2"] {} /* affects elements 1 & 3 only */
Если я правильно вычислил, 3 класса могут дать не менее 40 комбинаций опций селектора.
Чтобы пояснить мою заметку о «неограниченных» возможностях, учитывая правильную логику, один класс может потенциально вложить в нее комбинации кода, которые просматриваются через синтаксис
[attr*=value]
.Сложно ли это управлять? Возможно. Это может зависеть от логики того, как именно это реализовано. Точка, которую я пытаюсь выявить, заключается в том, что с CSS3 возможно, чтобы упорядочение классов было значительным, если бы оно было желательным и планировалось для него, и может быть ужасно неправильно использовать мощность CSS таким образом.
Нет, это не так, как вы сказали, если два правила имеют одинаковую специфичность, то будет применяться тот, который приходит позже в вашем CSS.
Нет, это не так. соответствующая часть стандарта W3C не упоминает порядок появления для классов.