Điều gì có thể tạo ra hành vi sau đây?nội suy chuỗi python
>>> print str(msg)
my message
>>> print unicode(msg)
my message
Nhưng:
>>> print '%s' % msg
another message
Thông tin thêm:
- đối tượng
msg
tôi được thừa hưởng từunicode
. - các phương pháp
__str__
/__unicode__
/__repr__
phương pháp được ghi đè để trả lại chuỗi'my message'
. - đối tượng
msg
được khởi tạo bằng chuỗi'another message'
. - này đang chạy trên python 2.5
- biến
msg
đã không thay đổi giữa các bài kiểm tra - này thực sự là doctest thực sự mà thực sự là cho những kết quả này.
Tôi muốn một giải pháp phù hợp với doctest này, với fuss tối thiểu (đặc biệt là xung quanh thừa kế thực tế):
>>> print '%s' % msg
my message
Cảm ơn tất cả lời đề nghị.
Tôi không cảm thấy điều này sẽ giúp nhiều hơn, nhưng đối với độc giả tò mò (và pythonist mạo hiểm), đây là việc thực hiện các đối tượng:
class Message(zope.i18nmessageid.Message):
def __repr__(self):
return repr(zope.i18n.interpolate(self.default, self.mapping))
def __str__(self):
return zope.i18n.interpolate(self.default, self.mapping)
def __unicode__(self):
return zope.i18n.interpolate(self.default, self.mapping)
Đây là cách chúng ta tạo ra các đối tượng msg:
>>> msg = Message('another message', 'mydomain', default='my message')
Zope gói phiên bản và mã được sử dụng là:
- zope.i18n-3.4.0 (interpolation() method code)
- zope.i18nmessageid-3.4.3 (Message class code)
EDIT INFO:
- thêm/cập nhật tên của các phương pháp đã được overriden
- thêm một số thông tin hơn (phiên bản python, và thông tin nhỏ)
- cập nhật một số thông tin sai (lớp của `msg` được dựa trên lớp` unicode` chứ không phải `basestring`)
- thêm cài đặt thực tế ion của lớp sử dụng
@extraneon: đó là python 2 .x: 'print' là một câu lệnh, basestring, unicode! – SilentGhost
thay đổi giá trị của biến 'msg' giữa' print' s sẽ giải thích nó – van
Bạn có mã thực sự cho đối tượng đó không? (Hoặc đúng hơn là lớp của nó.) Sẽ hữu ích nếu bạn có thể dán nó vào đây ... –