In bằng Python không sử dụng __repr__
, __unicode__
hoặc __str__
cho lớp con unicode của tôi khi in. Bất kỳ manh mối nào về những gì tôi đang làm sai?In bằng Python không sử dụng __repr__, __unicode__ hoặc __str__ cho lớp con unicode?
Đây là mã của tôi:
Sử dụng Python 2.5.2 (r252: 60.911, 13 Tháng 10 2009, 14:11:59)
>>> class MyUni(unicode):
... def __repr__(self):
... return "__repr__"
... def __unicode__(self):
... return unicode("__unicode__")
... def __str__(self):
... return str("__str__")
...
>>> s = MyUni("HI")
>>> s
'__repr__'
>>> print s
'HI'
Tôi không chắc chắn nếu điều này là một chính xác xấp xỉ của trên, nhưng chỉ để so sánh:
>>> class MyUni(object):
... def __new__(cls, s):
... return super(MyUni, cls).__new__(cls)
... def __repr__(self):
... return "__repr__"
... def __unicode__(self):
... return unicode("__unicode__")
... def __str__(self):
... return str("__str__")
...
>>> s = MyUni("HI")
>>> s
'__repr__'
>>> print s
'__str__'
[EDITED ...] nghe có vẻ như là cách tốt nhất để có được một đối tượng chuỗi isinstance (ví dụ, basestring) và cung cấp quyền kiểm soát unicode lại lần lượt các giá trị, và với một repr unicode là ...
>>> class UserUnicode(str):
... def __repr__(self):
... return "u'%s'" % super(UserUnicode, self).__str__()
... def __str__(self):
... return super(UserUnicode, self).__str__()
... def __unicode__(self):
... return unicode(super(UserUnicode, self).__str__())
...
>>> s = UserUnicode("HI")
>>> s
u'HI'
>>> print s
'HI'
>>> len(s)
2
Các _ str _ và _ repr _ trên thêm gì để ví dụ này nhưng ý tưởng là để cho thấy một mô hình rõ ràng , để được mở rộng khi cần thiết.
Chỉ cần để chứng minh rằng mô hình này cấp kiểm soát:
>>> class UserUnicode(str):
... def __repr__(self):
... return "u'%s'" % "__repr__"
... def __str__(self):
... return "__str__"
... def __unicode__(self):
... return unicode("__unicode__")
...
>>> s = UserUnicode("HI")
>>> s
u'__repr__'
>>> print s
'__str__'
Suy nghĩ?
Mã của bạn có thực sự thụt vào như ví dụ đầu tiên không? – GreenMatt
Tôi phải đoán xem câu hỏi của bạn là gì. Nếu tôi hiểu sai, vui lòng cập nhật bài đăng của bạn lên * bao gồm câu hỏi thực tế, rõ ràng *. –
Mặc dù đây là một dấu hiệu tốt đẹp, tôi muốn hỏi tại sao trong h *** bạn muốn phân lớp str hoặc unicode? Ý tôi là, dữ liệu sẽ không thay đổi được, do đó, đối tượng kết quả sẽ hoàn toàn vô dụng. – kay