print OBJECT
gọi OBJECT.__str__()
, sau đó khi gọi OBJECT.__repr__()
? Tôi thấy rằng print OBJECT
gọi OBJECT.__repr__()
khi OBJECT.__str__()
không tồn tại, nhưng tôi hy vọng đó không phải là cách duy nhất để gọi __repr__()
.Khi __repr __() được gọi?
Trả lời
repr(obj)
gọi
obj.__repr__
mục đích __repr__
là nó cung cấp một biểu diễn 'chính thức' của đối tượng được coi là một biểu thức có thể được eval
ed để tạo ra các đối tượng. có nghĩa là,
obj == eval(repr(obj))
nên, nhưng không phải lúc nào trong thực tế, mang lại True
tôi được hỏi trong các ý kiến cho một ví dụ khi obj != eval(repr(obj))
.
class BrokenRepr(object):
def __repr__(self):
return "not likely"
đây là một số khác:
>>> con = sqlite3.connect(':memory:')
>>> repr(con)
'<sqlite3.Connection object at 0xb773b520>'
>>>
repr(obj)
cuộc gọi obj.__repr__
.
Điều này nhằm mục đích mô tả rõ ràng đối tượng, đặc biệt cho mục đích gỡ lỗi. More info in the docs
@ S.Lott cảm ơn vì đã chỉ ra lỗi đánh dấu của tôi, nó đã được sửa ngay bây giờ. Tôi chỉ không biết bạn đang đề cập đến những nguyên tắc nào. –
Trong trăn 2.x, `` `obj `` will end up calling
obj. repr() . It's shorthand for
repr() `.
-1: Cú pháp không được chấp nhận, cú pháp sẽ bị xóa. –
@S. Lott: Lưu ý trong câu trả lời – recursive
Không chỉ __repr__()
được gọi khi bạn sử dụng repr()
, mà còn trong các trường hợp sau:
- Bạn gõ
obj
trong vỏ và nhấn nhập - Bạn đã bao giờ in một đối tượng trong một cuốn từ điển/tuple/list. Ví dụ:
print [u'test']
không in['test']
Cảm ơn bạn vì điều này! –
- 1. Khi nào viewDidLoad được gọi?
- 2. Khi nào ServiceConnection.onServiceDisconnected() được gọi?
- 3. onServiceDisconnected() không được gọi sau khi gọi Dịch vụ stopSelf()
- 4. Lỗi: FB.login() được gọi trước khi gọi FB.init()
- 5. Khi nào thì initWithCoder được gọi?
- 6. Khi nào PyEval_InitThreads được gọi là?
- 7. Khi getView() trong ArrayAdapter được gọi là
- 8. onCreateOptionsMenu được gọi trước khi bậtTạo android
- 9. Khi nào nên super.onResume() được gọi?
- 10. Xóa thông báo khi addAction được gọi?
- 11. DatePickerDialog onDateSet được gọi khi xoay
- 12. Khi nào OnValidate được gọi trong LINQ?
- 13. ScheduledExecutorService: khi tắt máy nên được gọi?
- 14. Khi nào Move Constructor được gọi?
- 15. Tại sao một lớp học được gọi là "được gọi" khi không được bắt đầu? - Python
- 16. Khi phương pháp được đánh dấu bằng @PostConstruct được gọi?
- 17. onConfigurationChanged không được gọi khi setRequestedConfiguration đã được sử dụng
- 18. Phương thức nào được gọi khi một QGraphicsItem được chọn
- 19. NSNotification không được gửi khi postNotificationName: được gọi là
- 20. onRestoreInstanceState() không được gọi khi được mong đợi
- 21. Destructor không được gọi khi một ngoại lệ được ném
- 22. ProgressDialog không được hiển thị khi AsyncTask.get() được gọi
- 23. prepareForSegue không được gọi khi hàng UITableView được chọn?
- 24. Đôi khi không nhận được gọi lại onCreateLoader sau khi gọi initLoader
- 25. Các chức năng được hoãn lại có được gọi khi đang gọi nhật ký.
- 26. SpriteBatch: "Bắt đầu không thể được gọi lại cho đến khi End được gọi thành công."
- 27. Tại sao sigprocmask được gọi khi gọi đến hệ thống gọi lại?
- 28. Khi nào là finalize được gọi là trên singletons khi một classloader được phát hành?
- 29. TextWatcher được gọi ngay cả khi văn bản được đặt trước khi thêm người theo dõi
- 30. PrepareForSegue được gọi trước khi didSelectRowAtIndexPath chỉ khi thứ ba segue được thêm
Tại sao obj == eval (repr (obj)) không phải lúc nào cũng cung cấp đúng? Bạn có thể đưa ra một ví dụ? – inspectorG4dget
Đối với một đối tượng phức tạp, chẳng hạn như một tệp, nó sẽ không nhất thiết trả về True. – Avi
@ inspectorG4dget: obj == eval (loại ('myclass',(), {})) –