Có cách nào trong python để tăng đối tượng int tại chỗ, int dường như không thực hiện __iadd__
nên + = 1 thực sự trả về một đối tượng mớităng int đối tượng
>>> n=1
>>> id(n)
9788024
>>> n+=1
>>> id(n)
9788012
Những gì tôi muốn là n duy trì chỉ vào cùng một đối tượng.
Mục đích: Tôi có lớp có nguồn gốc từ int và tôi muốn thực hiện loại C '++ n' nhà điều hành cho lớp đó
Kết luận: ok như int là không thay đổi không có cách nào, có vẻ như tôi sẽ phải viết một lớp học của riêng tôi như sau:
class Int(object):
def __init__(self, value):
self._decr = False
self.value = value
def __neg__(self):
if self._decr:
self.value -= 1
self._decr = not self._decr
return self
def __str__(self):
return str(self.value)
def __cmp__(self, n):
return cmp(self.value, n)
def __nonzero__(self):
return self.value
n = Int(10)
while --n:
print n
Tại sao bạn muốn thực hiện một nhà điều hành tiền tố cho nó? Bạn sẽ thêm một bộ tiền xử lý tùy chỉnh để chuyển đổi ++ n thành một cuộc gọi phương thức? – Ryan
hmm Tôi chỉ muốn cho bạn bè thấy python có thể làm trong khi --n: print n;) –
xem điều này cho một cách tốt đẹp nếu hơi phức tạp để bọc ints của bạn trong một lớp ẩn danh (có thể thay đổi) sẽ hoạt động như 'tham khảo': http://stackoverflow.com/a/1123054/409638 tức là ref = type ('',(), {'n': 1}) – robert