Lưu ý: làm không sử dụng eval trong bất kỳ trường hợp bạn đang nhận được tên để tìm kiếm từ người dùng nhập dữ liệu vào. Ví dụ: nếu điều này xuất phát từ trang web, không có gì ngăn mọi người xâm nhập:
__import__("os").system("Some nasty command like rm -rf /*")
làm đối số. Tốt hơn là giới hạn các vị trí tra cứu được xác định rõ như từ điển hoặc cá thể sử dụng getattr(). Ví dụ, để tìm giá trị "bài" trên tự, sử dụng:
varname = "post"
value = getattr(self, varname) # Gets self.post
Tương tự như vậy để thiết lập nó, sử dụng setattr():
value = setattr(self, varname, new_value)
Xử lý fully qualified names, như "post.id", bạn có thể sử dụng chức năng như dưới đây thay cho getattr()/setattr().
def getattr_qualified(obj, name):
for attr in name.split("."):
obj = getattr(obj, attr)
return obj
def setattr_qualified(obj, name, value):
parts = name.split(".")
for attr in parts[:-1]:
obj = getattr(obj, attr)
setattr(obj, parts[-1], value)
vâng .. cảm ơn rất nhiều. –
Tại sao không sử dụng setattr()? – danger89