isinstance python
В каких случаях нужно использовать isinstance в Python? Утиная типизация все спишет в функциях и методах, или есть конкретные моменты?
Ответы (1 шт):
Думаю, что ответ можно найти в анналах документации по Python. В действительности данная функциональность редко встречается в пользовательских классах. Но есть одно хорошее НО: если вы это не используете, это совершенно не значит, что это никому не нужно.
Приведу перевод из Programming FAQ официальной документации.
How do I check if an object is an instance of a given class or of a subclass of it?
Перевод: как мне проверить, является ли объект экземпляром данного класса или его подкласса
Use the built-in function isinstance(obj, cls).
Перевод: Используйте встроенную функцию isinstance(obj, cls)
Вот такой ответ. Сомневаться в нужности той или иной конструкции не приходится, пока не появляются примеры и практика их использования, так называемые best practices. Если вам нужно проверить, является ли объект экземпляром данного класса или его подкласса, тогда используйте. Лаконично.
Далее по тексту документации встречается такая оговорка, которая уточняет ОО стиль
If you are developing the classes yourself, a more proper object-oriented style is to define methods on the classes that encapsulate a particular behaviour, instead of checking the object’s class and doing a different thing based on what class it is
Перевод Если вы разрабатываете собственные классы, то более правильным объектно-ориентированным стилем будет определение методов класса, которые инкапсулируют конкретное поведение, вместо того, чтобы проверять объект класса и выполнять различные действия в зависимости от того, какой это класс
Пример, вместо вот такого использования:
def search(obj):
if isinstance(obj, Mailbox):
... # code to search a mailbox
elif isinstance(obj, Document):
... # code to search a document
elif ..
Делай так
class Mailbox:
def search(self):
... # code to search a mailbox
class Document:
def search(self):
... # code to search a document
obj.search()