我已经实现了一个类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'。它没有问题,并返回正确的数据类型。 –