Một tùy chọn khác có thể, nhưng nó phụ thuộc vào ý của bạn trước đây :
undefined = object()
class Widget:
def __init__(self):
self.bar = 1
def zoom(self):
print("zoom!")
a = Widget()
bar = getattr(a, "bar", undefined)
if bar is not undefined:
print("bar:%s" % (bar))
foo = getattr(a, "foo", undefined)
if foo is not undefined:
print("foo:%s" % (foo))
zoom = getattr(a, "zoom", undefined)
if zoom is not undefined:
zoom()
đầu ra:
bar:1
zoom!
Điều này cho phép bạn thậm chí kiểm tra các thuộc tính Không có giá trị.
Nhưng! Hãy cẩn thận, bạn không vô tình khởi tạo và so sánh undefined
nhiều nơi vì is
sẽ không bao giờ hoạt động trong trường hợp đó.
Cập nhật:
bởi vì những gì tôi đã cảnh báo trong đoạn văn trên, có nhiều định nghĩa không bao giờ khớp, tôi gần đây đã sửa đổi một chút mô hình này:
undefined = NotImplemented
NotImplemented
, đừng nhầm lẫn NotImplementedError
, là một tích hợp: nó phù hợp với ý định của một JS undefined
và bạn có thể sử dụng lại định nghĩa của nó ở mọi nơi và nó sẽ luôn khớp. Hạn chế là nó "trung thực" trong booleans và nó có thể trông kỳ lạ trong các bản ghi và dấu vết ngăn xếp (nhưng bạn nhanh chóng vượt qua nó khi bạn biết nó chỉ xuất hiện trong bối cảnh này).
import string hasattr(string, "lower")