Python函数调用类的属性

时间:2017-03-12 05:27:52

标签: python function

我正在尝试使用"setx"Property的{​​{1}}函数来处理我从excel获得的日期信息。我有一些自己的函数可以进行我在课外测试的数据处理,它们工作得很好。但是当我将它们移到课堂中时,除非我先使用Class实例,否则它们会突然变得不可见。当我使用self.方法时,我收到错误:

self.My_xldate_as_tuple()

即使代码完全是我以前在课外使用过的,但是它起作用了。

在进入My_xldate_as_tuple() takes 1 positional argument but 2 were given 块之前,我正在处理类之外的日期数据并从类外部设置变量。当我有大约15种不同的操作完全基于Property Set更改时,这变得笨拙。我展示了工作代码集和非工作代码集的缩短版本。 NumDates Property调用发生了什么变化,它改变了函数输入的方式?

破碎的代码:

self.

工作代码:

class XLDataClass(object):

    _NumDates = []
    TupDates = []

    def getNumDates(self): return self._NumDates    
    def setNumDates(self, value): 
        self._NumDates = value
        self.TupDates = list(map(self.My_xldate_as_tuple,value)) #Error here

        #This version doesn't work either, since it can't find My_xldate_as_tuple anymore
        self.TupDates = list(map(My_xldate_as_tuple,value))

    def delNumDates(self):del self._NumDates
    NumDates = property(getNumDates,setNumDates,delNumDates,"Ordinal Dates")

    #exact copy of the My_xldate_as_tuple function that works outside the class
    def My_xldate_as_tuple(Date):
        return xlrd.xldate_as_tuple(Date,1)

    #Other code and functions here
#end XlDataClass

def GetExcelData(filename,rowNum,titleCol):
    csv = np.genfromtxt(filename, delimiter= ",")
    NumDates = deque(csv[rowNum,:])
    if titleCol == True:
        NumDates.popleft()
    return NumDates

#Setup
filedir = "C:/Users/blahblahblah"
filename = filedir + "/SamplePandL.csv"
xlData = XLDataClass()

#Put csv data into xlData object
xlData.NumDates= GetExcelData(filename,0,1)

1 个答案:

答案 0 :(得分:2)

Python中的实例方法需要在参数列表中使用显式self。在课堂内,您需要编写方法定义,如:

def My_xldate_as_tuple(self, Date):