[英]Specifics of converting a custom __repr__, __str__ on a custom python class
[英]Python proper use of __str__ and __repr__
我目前的項目需要廣泛使用位字段。 我找到了一個簡單的,功能性的配方,用於一個字段類,但它缺少我需要的一些功能,所以我決定擴展它。 我只需要實現__str__
和__repr__
,我想確保我遵循慣例。
__str__
應該是非正式和簡潔的,所以我讓它返回位字段的十進制值(即str(bit field 11)
將是"3"
。
__repr__
應該是對象的官方表示,所以我讓它返回實際的位串(即repr(bit field 11)
將是"11"
)。
在您看來,這個實現是否符合str
和repr
的約定?
另外,我使用了bin()
函數來獲取存儲在類中的值的位串。 這與Python <2.6不兼容,有替代方法嗎?
干杯,
皮特
__repr__
應該最好是一個可以用來重新創建對象的字符串,例如,如果你在它上面使用eval
- 請參閱這里的文檔。 這不是一門精確的科學,因為它可能取決於模塊用戶如何導入它。
我希望__str__
返回二進制字符串, __repr__
返回Classname(binary_string)
,或者可以用來重新創建對象的任何東西。
在bitstring模塊(我維護)中,如果bitstring是4位長的倍數,則__str__
是十六進制的,否則它是二進制或兩者的組合。 此外,如果bitstring非常長,那么它會被截斷(你不想嘗試在交互式會話中打印100 MB的bittring!)
如果我是你,我會完全避免使用bin()
函數。 原因是,如果你的比特串零位(見我的問題開始不能用在這里 )。 我建議使用bin
方法或屬性。
我會考慮讓__str__
返回一個十六進制表示。 通過這種方式,可以更容易地觀察實際比特值是什么,因此更有用。 但仍然非常簡潔(實際上,字符數少於十進制表示)。
__repr__
需要返回一些內容,如果傳遞給您的構造函數,則會創建一個與原始對象完全相同的新對象。
你的返回'11',但是如果你通過'11'到你的構造函數,你將得不到相同的位域。 所以__repr__
不行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.