model_definition
метод нуждается в экземпляре, это то, что означает параметр self
. Теперь, чтобы использовать декоратор в экземпляре, вы можете просто передать экземпляр в качестве параметра. Вот пример, где декоратор статичен:
class Upper(object):
def __init__(self):
self.model = None
@staticmethod
def model_definition(name=''):
def func(f):
def wrapper(*args):
self = args[0]
print('I am defining the model')
if not self.model:
self.model = name
return f(*args)
return wrapper
return func
class Lower(Upper):
def __init__(self):
Upper.__init__(self)
self.define_model()
@Upper.model_definition(name='example_model')
def define_model(self):
print('The model is : ', self.model)
Main:
l = Lower()
Я определяю модель
('Модель: ',' example_model ')
blockquote>
Я думаю, что просто необходимо бросить результат Enum.Parse
кому: MyEnum?
. Дело обстоит так с nullable ints, по крайней мере. Например:
int? i;
i = shouldBeNull ? null : (int?) 123;
Так:
MyClassEnum = Convert.IsDBNull(x)
? null
: (MyEnum?) Enum.Parse(typeof(MyEnum), x.ToString(), true)
В Вашем коде существует синтаксическая ошибка: положение ':' и'?' должен быть обменен:
MyClassEnum = Convert.IsDBNull(x) ? null :
(MyEnum) Enum.Parse(typeof(MyEnum), x.ToString(), true)
BTW:
насколько я знаю, рекомендуемый путь состоит в том, чтобы использовать перечислимый элемент под названием 'Ни один' вместо перечисления Nullable, например:
public enum MyEnum
{
None, Value1, Value2, Value3
}
и
MyClassEnum = Convert.IsDBNull(x) ? MyEnum.None :
(MyEnum) Enum.Parse(typeof(MyEnum), x.ToString(), true);
Я думаю, что необходимо будет просто бросить результат к (MyEnum?), а не (MyEnum)?