Trong lớp B bên dưới, tôi muốn hàm __set__
trong lớp A được gọi bất cứ khi nào bạn gán giá trị cho B().a
. Thay vào đó, hãy đặt giá trị thành B().a
ghi đè B().a
bằng giá trị. Lớp C gán cho C().a
hoạt động chính xác, nhưng tôi muốn có một phiên bản A riêng biệt cho mỗi lớp người dùng, tức là tôi không muốn thay đổi 'a' trong một phiên bản C() để thay đổi 'a' trong tất cả các phiên bản khác. Tôi đã viết một vài bài kiểm tra để giúp minh họa vấn đề. Bạn có thể giúp tôi xác định một lớp học sẽ vượt qua cả test1 và test2?Tại sao việc khai báo một lớp mô tả trong hàm __init__ phá vỡ chức năng mô tả?
class A(object):
def __set__(self, instance, value):
print "__set__ called: ", value
class B(object):
def __init__(self):
self.a = A()
class C(object):
a = A()
def test1(class_in):
o = class_in()
o.a = "test"
if isinstance(o.a, A):
print "pass"
else:
print "fail"
def test2(class_in):
o1, o2 = class_in(), class_in()
if o1.a is o2.a:
print "fail"
else:
print "pass"
OK, tôi có thể sống với điều đó – user83753
Suy nghĩ thứ hai, có thể tôi không thể sống với điều đó. Trong ứng dụng của tôi, tôi muốn đặt các hàm thành viên trong A cũng phụ thuộc vào trạng thái của lớp chủ sở hữu. Ví dụ: Chủ sở hữu (thông tin tiểu bang) Chủ sở hữu.a = dữ liệu Chủ sở hữu.a.foo() Làm cách nào để nhận thông tin trạng thái từ Chủ sở hữu? – user83753
@unknown (google): oh, để bạn lưu trữ dữ liệu trên chính cá thể đó. Vì vậy, bạn có thể lấy nó từ các phương pháp. – nosklo