Пользовательские классы-операторы, наследованные от bpy.types.Operator, являются статическими классами. Следовательно в них могут быть определены только статические переменные.
Определение статической переменной sampleVar в классе-операторе SampleClass:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class SampleClass(bpy.types.Operator): bl_idname = "sample.sample_class" sampleVar = 5 def execute(self, context): print(self.sampleVar) self.__class__.sampleVar += 1 print(self.sampleVar) print(self.__class__.sampleVar) def sampleFunc(): SampleClass.sampleVar += 1 print(SampleClass.sampleVar) |
Выражение:
1 |
sampleVar = 5 |
определит статическую переменную sampleVar для класса, в который оно будет включено, со значением по умолчанию равным 5.
Так как в момент выполнения оператора создается временный экземпляр его класса, в котором создаются локальные копии переменных класса, получение значения нужной переменной внутри класса возможно через текущий экземпляр класса:
1 |
print(self.sampleVar) |
или через обращение к самому классу:
1 |
print(self.__class__.sampleVar) |
Экземпляр класса существует только в момент его выполнения, поэтому заносить значения в переменную через текущий экземпляр нельзя. Заносимое значение сохранится только в локальной переменной sampleVar текущего экземпляра класса, который перестанет существовать по завершении выполнения оператора, а не в статической переменной класса. Следовательно заносить значение в статическую переменную можно только через обращение к классу.
1 |
self.__class__.sampleVar += 1 |
Обращение к статическим переменным класса извне осуществляется через обращение по его имени:
1 2 |
SampleClass.sampleVar += 1 print(SampleClass.sampleVar) |