Tôi có một bộ mô tả về một lớp và phương thức __set__
của nó không được gọi. Tôi đã tìm kiếm lâu dài và khó khăn về điều này trong một vài giờ và không có câu trả lời cho điều này. Nhưng những gì tôi nhận thấy dưới đây là khi tôi gán 12 cho MyTest.X, nó sẽ xóa bộ mô tả thuộc tính cho X và thay thế nó bằng giá trị 12. Vì vậy, lệnh in cho hàm Get được gọi. Tốt lắm.Tại sao trình mô tả Python __set__ không được gọi là
Nhưng bản in cho chức năng __set__
KHÔNG được gọi. Tui bỏ lỡ điều gì vậy?
class _static_property(object):
''' Descriptor class used for declaring computed properties that don't require a class instance. '''
def __init__(self, getter, setter):
self.getter = getter
self.setter = setter
def __get__(self, instance, owner):
print "In the Get function"
return self.getter.__get__(owner)()
def __set__(self, instance, value):
print "In setter function"
self.setter.__get__()(value)
class MyTest(object):
_x = 42
@staticmethod
def getX():
return MyTest._x
@staticmethod
def setX(v):
MyTest._x = v
X = _static_property(getX, setX)
print MyTest.__dict__
print MyTest.X
MyTest.X = 12
print MyTest.X
print MyTest.__dict__
Bạn có chắc chắn muốn sử dụng các thuộc tính lớp thay vì khởi tạo một cá thể không? – user2357112
Trong trường hợp của tôi mà là rất phức tạp, đây là gói phương pháp tĩnh, mà cuối cùng được chuyển xuống phương pháp tĩnh C + +. –
Ít nhất SWIG có một số vấn đề với các giao thức mô tả, vì vậy giải pháp có thể nằm trong lớp gói C++ của bạn, nếu bạn làm nhiều thứ phức tạp hơn được hiển thị ở đây. – schlenk