2016-01-11 29 views
3

我有一個嵌套的結構,它包含ints,並且想在結構上做printpprint時用科學記數法顯示它們。
我的想法是添加創建我的int類重載的類,當打印將做我所需要的。做print(a)在python中打印int的鉤子

EDIT2時

#!/usr/bin/python 

class A(int): 
    def __str__(self, *args): 
     import ipdb; ipdb.set_trace() 

    def __unicode__(self, *args): 
     import ipbd; ipdb.set_trace() 

    def __repr__(self, *args): 
     import ipbd; ipdb.set_trace() 

    def __int__(self, *args): 
     import ipbd; ipdb.set_trace() 

a = A() 
a+=2 
print(a) 

斷點沒有得到所謂: 此代碼做什麼,我想:

但是我不能讓一個掛鉤,一個int的表示
#!/usr/bin/python 
from collections import defaultdict 
from pprint import pprint 

class A(int): 
    def __init__(self): 
     self._value = 0 


# def __add__(self, other): 
#  self._value += other 
#  return self 

    def __iadd__(self, other): 
     self._value += other 
     return self 

    def __str__(self): 
     return "{:,}".format(self._value) 

    def __repr__(self): 
     return "{:,}".format(self._value) 

a = defaultdict(lambda: defaultdict(A)) 
a[0][1]+=123456789 
a[0][2]+=100000 
pprint(a) 
+1

你沒有在你的方法中返回任何東西 –

+0

'a + = 2' - 這是一個問題的來源:'+ =','+',''','*'的默認實現。 。返回新的'int'實例。您必須重寫'__add__','__mul__',...以返回正確的'A'實例 –

+0

此外,請考慮使用繼承的代理/包裝器。在這種情況下通常會更好。 –

回答

4

a+=2後,a變量重新分配,併成爲int

事後發生的一切與您的A類無關。

0

試試這個簡單的例子:

class A(int): 
    def __str__(self): 
     return "{:.2E}".format(self) 

,然後就print(A(3))會給你3.00E+00

+0

良好但這儘快的對象被修改突破,爲'int'是不可改變的。(在'A + = 2'語句) – MatsLindh

+0

所以覆蓋'__add__'以及 – PatNowak

+0

@MatsLindh:他施放到一個立即開始打印前,將工作,但沒有在一個格式化功能,其中OP是試圖避免任何優勢。 –