Нулевое значение возражает в NHibernate

Если вы используете python3.6 или более позднюю версию, вы можете сделать это, используя __init_subclass__ , что лично для меня лучше, чем метакласс.

Пример __init_subclass__ основан на описанном сценарии использования:

class Parent:
    def __init_subclass__(cls):
        if not hasattr(cls, 'parameters'):
          raise TypeError(f'Subclass of {cls} does not have a parameters class attribute')

    def __init__(self, **kwargs):
        for param in self.__class__.parameters:
            self.setattr(param, kwargs.get(param))

    def compare(self, other):
        for param in self.__class__.parameters:
            if self.getattr(param) != other.getattr(param):
                return False
        return True


class GoodChild(Parent):
    parameters = ['length', 'height', 'width']


class BadChild(Parent):
    pass

В результате возникает исключение TypeError при создании класса BadChild (не при его создании): [ 119]

TypeError: Subclass of  does not have a parameters class attribute

10
задан James Allen 25 March 2009 в 16:30
поделиться

2 ответа

У меня нет категорических ответов, создающих средство доступа метода/свойства, которое не отображается, и это возвращает значение по умолчанию/несуществующий объект, если исполнительный адрес является пустым.

public Address GetAddressOrDefault()
{
  return Address ?? new NullAddress();
}

Или подобный первому, создайте обертку для Вашего Address то, что Вы используете в представлении.

public class AddressViewData
{
  private Address address;

  public AddressViewData(Address address)
  {
    this.address = address ?? new NullAddress();
  }

  // expose all address properties as pass-throughs
  public string Street
  {
    get { return address.Street; }
  }
}
2
ответ дан 4 December 2019 в 02:52
поделиться

Благодаря идеям Заторов (см. его ответ и комментарии) я изменил свойство Address своего объекта Человека от:

public virtual string Address { get; set; }

кому:

private Address _address;
public virtual Address Address
{
    get { return _address ?? new Address(); }
    set { _address = value; }
}

Это решило мою проблему, она работает, и это, кажется, работает с NHibernate. Yey!

5
ответ дан 4 December 2019 в 02:52
поделиться
Другие вопросы по тегам:

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