Таким образом, основной язык Python и встроенные модули используют много утиной печати. Но для нашего собственного кода, скажем, я хочу создать свой собственный класс с методом, который имеет дело с «определенными типами» объектов, более идиоматично использовать утиную печать:
class MerkleTree:
def method(self, document):
try:
hash_ = document.sha256_hash()
except AttributeError:
raise TypeError()
do_smth_with_hash(hash_)
или более идиоматично просто использовать обычную проверку типа:
class MerkleTree:
def method(self, document):
if isinstance(document, SHA256Hashable):
raise TypeError()
hash_ = document.sha256_hash()
do_smth_with_hash(hash_)
try ... except AttributeError
, лучше, чем код, состоящий в основном из проверок типов? - person DeepSpace   schedule 19.02.2020AttributeError
s, не связанные с самим атрибутомsha256_hash
, что было бы ошибкой. - person busukxuan   schedule 19.02.2020