Как я могу определить, является ли экземпляр класса из модели Django подклассом другой модели?

Мне назвали класс BankAccount как базовый класс. Я также имею CheckingAccount и SavingsAccount классы, которые наследовались BankAccount.

BankAccount не является абстрактным классом, но я не создаю объект из него, только наследующие классы.

Затем я выполняю запрос как это:

account = BankAccount.objects.get(id=10)

Как я знаю, ли учетная запись CheckingAccount или SavingsAccount?

Путем я делаю это теперь таким образом:

checking_account = CheckingAccount.objects.get(id=account.id)

Если это существует, это - a CheckingAccount, иначе это - a SavingsAccount.

11
задан Esteban Küber 23 February 2010 в 00:12
поделиться

4 ответа

Попробуйте использовать атрибуты checkingaccount и savingsaccount. Тот, который есть, не взорвется.

11
ответ дан 3 December 2019 в 09:41
поделиться

Вы можете использовать isinstance (account, SavingsAccount) , но обычно предпочитают его избегать и использовать вывод типа утки , глядя на атрибуты объекта, и посмотрите, не крякает ли он как подкласс.

Чтобы узнать, есть ли у объекта атрибут , используйте метко названную hasattr встроенную функцию или используйте getattr и проверьте, не возникло ли исключение AttributeError.

2
ответ дан 3 December 2019 в 09:41
поделиться

Добавьте метод GetAccountType() к вашим счетам Checking и Savings, когда вы получите объект обратно от BankAccount.objects.get(), то вызовите его, если все, что происходит от BankAccount, имеет этот метод, то все будет в порядке.

0
ответ дан 3 December 2019 в 09:41
поделиться

Немного неловко, но это сработает:

>>> class BankAccount(object): pass
...
>>> class SavingsAccount(BankAccount): pass
...
>>> class CheckingAccount(BankAccount): pass
...
>>> x = SavingsAccount()
>>> type(x) == type(SavingsAccount())
True
>>> type(x) == type(CheckingAccount())
False
-2
ответ дан 3 December 2019 в 09:41
поделиться
Другие вопросы по тегам:

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