Có cách nào đẹp hơn của cách làm như sau:Các câu lệnh thử lồng nhau trong python?
try:
a.method1()
except AttributeError:
try:
a.method2()
except AttributeError:
try:
a.method3()
except AttributeError:
raise
Nó trông khá khó chịu và tôi không muốn làm:
if hasattr(a, 'method1'):
a.method1()
else if hasattr(a, 'method2'):
a.method2()
else if hasattr(a, 'method3'):
a.method3()
else:
raise AttributeError
để duy trì hiệu quả tối đa.
Bạn đã thử nghiệm lý thuyết của mình rằng tùy chọn thứ hai không hiệu quả? Nó sẽ làm tôi ngạc nhiên nếu nó không hiệu quả hơn cái đầu tiên. – Oddthinking
Oddthinking có thể là chính xác. hasattr loại bỏ sự cần thiết cho một ngoại lệ được nâng lên. –
Thực ra, việc thực thi hasattr() về cơ bản chỉ gọi getattr() và trả về False nếu một ngoại lệ được nâng lên; xem http://svn.python.org/view/python/tags/r254/Python/bltinmodule.c?view = markup – Miles