我已經實現了一個類BasicForm
,還包含一個方法__str__
能夠打印的東西。我也有一個函數stringToBasicForm(string)
將某些類型的字符串轉換爲BasicForm對象。Python自動轉換數據類型
在我的計劃之後,我允許字符串數組array
,我做到以下幾點:
for i in xrange(len(array)):
array[i] = stringToBasicForm(array[i])
我的問題是,在此之後,array
似乎包含str
類型的對象,而不是按照我的預期鍵入BasicForm
。我認爲Python出於某種原因自動將我的BasicForms轉換爲使用__str__
的字符串。
發生了什麼事?我怎樣才能讓我的數組在最後包含好類型的對象(不需要創建輔助數組)?
任何幫助將不勝感激。
備註:我使用Python 2.7
這裏有一個小十歲上下的工作例如:
from fractions import *
from numpy import *
class BasicForm:
def __init__(self,n,coeff,I):
if shape(I)[1] != n + 1:
print "Error: illegal I."
return
if not all([isinstance(f,Fraction) for f in coeff]):
print "Error: coefficients must be of class Fraction."
return
self.n = n
vect = zeros(2**(n+1)-1,dtype = Fraction)
for i in xrange(len(I)):
if not any(I[i]):
print "Error: the empty set doesn't code any basic form."
return
vect[subsetToIndex(n,I[i])] = coeff[i]
self.vect = vect
def __str__(self):
if not any(self.vect):
return "0"
s = ""
first = True
for i in xrange(2**(self.n+1)-1):
if self.vect[i] == 0:
continue
if self.vect[i] < 0:
s += "-"
if not first:
s = s[:-3] + "- "
if self.vect[i] != 1:
s += str(abs(self.vect[i])) + "*"
s += "("
I = indexToSubset(self.n,i)
for k in xrange(self.n+1):
if I[k]:
s += str(k)
s += ") + "
first = False
return s[:-2]
def stringToBasicForm(n,string):
out = BasicForm(n,[Fraction(0)],[ones(n+1,dtype = bool)])
return out
現在的怪異的一部分。如果我運行這個
n = 1
array = ["(01)"]
for i in xrange(len(array)):
array[i] = stringToBasicForm(n,array[i])
print isinstance(array[i],BasicForm), isinstance(array[i],str)
一切都按預期工作(輸出:True False
)。但是,如果我有
def opPBT(n,LPBT,BF_array):
tree = copy(LPBT)
array = copy(BF_array)
# Convert basic forms to elements to the Sullivan algebra (injection).
for i in xrange(len(array)):
if isinstance(array[i],str):
array[i] = stringToBasicForm(n,array[i])
print isinstance(array[i],BasicForm), isinstance(array[i],str)
elif array[i].n != n:
print "Error: basic form of wrong dimension."
return
array[i] = basicToSullivan(array[i])
return
n = 2
forms = ["(01)"]
lcomb = []
opPBT(n,lcomb,forms)
這是運行它,我想做些什麼,那麼輸出爲False True
,我也完全不知道我做錯了什麼(它可能是一些愚蠢的錯誤,但我會被定罪,如果我能看到它... ...)
'stringToBasicForm'做什麼? – timakro
不,Python不會像那樣使用for循環來完成自身的轉換。我們想看看你的stringToBasicForm函數。 – RemcoGerlich
@timakro它將某些字符串轉換爲'BasicForm'。它沒有問題,並返回正確的數據類型。 –