Định nghĩa __setattr__
ghi đè tất cả các phương thức/thuộc tính setter mà tôi định nghĩa trong một lớp. Tôi muốn sử dụng các phương thức setter được xác định trong thuộc tính, nếu một thuộc tính tồn tại cho một trường và sử dụng self.__dict__[name] = value
nếu không.Tôi cần xác định __setattr__ để gán các trường không có thuộc tính, nhưng sử dụng hàm setter/getter cho các trường có thuộc tính được xác định
Trợ giúp! Tôi đã tìm thấy một giải pháp đã sử dụng __setitem__
, nhưng cách này không hiệu quả đối với tôi
Thuộc tính được lưu trữ trong lớp python ở đâu? Làm cách nào để truy cập chúng?
Làm cách nào để xác định __setattr__
để nó sử dụng thuộc tính cho các trường có phương thức setter được xác định?
class test(object):
def _get_gx(self):
print "get!"
return self.__dict__['gx']
def _set_gx(self, gx):
print "set!"
self.__dict__['gx'] = gx
gx = property(_get_gx, _set_gx)
def __setattr__(self, name, value):
self.__dict__[name] = value
def __init__(self):
pass
cũng có,
Tại sao là "có được!" được in hai lần khi tôi làm,
x = test()
x.gx = 4
x.gx
prints:
"gets!"
"gets!"
4
Sẽ rất khó để làm việc này với sự thụt đầu dòng của bạn bị hỏng. Câu hỏi chung duy nhất mà bạn hỏi mặc dù là "nơi các nhà mô tả sống" và câu trả lời nằm trong dict của lớp. – aaronasterling
Họ không có trong từ điển lớp học. Các thuộc tính mà tôi xác định, không hiển thị trong từ điển lớp. – HaltingState
Sau đó, bạn đang làm điều gì sai. Mô tả trực tiếp trong từ điển lớp. Nhìn vào mô hình dữ liệu python để biết chi tiết. Nếu bạn sửa chữa thụt đầu dòng của bạn, tôi sẽ tìm ra nó cho bạn. – aaronasterling