2016-10-27 2 views
-1

Я - совершенно новые классы записи и вызова в Python. У меня есть класс, который я создал, и я пытаюсь тоже назвать этовызов класса Python

class writePDF(object): 
    def __init__(self,pdfn,hname,hnfont,PDFdic,rowfont,line): 
     self.pdfn = pdfn 
     self.hname = hname 
     self.hnfont = hnfont 
     self.PDFdic = PDFdic 
     self.rowfont = rowfont 
     self.line = line 
    def header(self): 
     c = canvas.Canvas(self.pdfn, pagesize=landscape(legal)) 
     c.setFontSize(self.hnfont),c.drawCentredString(500, 585, self.hname) 
     for k,v in self.PDFdic.items(): 
      c.setFontSize(self.rowfont) 
      c.drawString(v[0],v[1],k) 
      c.line(self.line) 
    def rows(self,layer,fields,loc,fs,locbreak,locreset): 
     loc = loc 
     counter = 0 
     for row in arcpy.da.searchCursor(layer,fields): 
      c.setFontSize(fs) 
      c.drawString(5, loc, null(row[0])) 
      c.drawString(25, loc, null(row[1])) 
      c.drawString(180, loc, null(row[2])) 
      c.drawString(320, loc, null(row[3])) 
      c.drawString(440, loc, null(row[4])) 
      c.drawString(500, loc, null(row[5])) 
      c.drawString(550, loc, null(row[6])) 
      c.drawString(590, loc, null(row[7])) 
      c.drawString(650, loc, null(row[8])) 
      c.drawString(700, loc, null(row[9])) 
      c.drawString(760, loc, null(row[10])) 
      c.drawString(830, loc, null(row[11])) 
      c.drawString(890, loc, null(row[12])) 
      c.drawString(940, loc, null(row[13])) 
      loc = loc-13 
      if loc <= locbreak: 
       c.showPage() 
       self.header() 
       loc = locreset 
      c.save() 

, когда я называю его:

PDFheader = writePDF(pdffn,hname,20,PDFdicE,10,line) 
PDFrow = writePDF.rows(sorte,fields,530,10,530) 

это дает мне эту ошибку

PDFrow = writePDF.rows(sorte,fields,530,10,530) 
TypeError: unbound method rows() must be called with writePDF instance as first argument (got Result instance instead) 

что такое правильный синтаксис для вызвать класс для создания объекта? должны ли у двух функций быть собственные классы?

+0

Только быстрое предложение, вы должны следовать python и назовите свои классы, начиная с прописных букв «WritePDF» и ваших экземпляров, начиная с нижнего регистра, и используя символы подчеркивания между словами «pdf_row». Это поможет избежать коллизий имен. – Soviut

+1

Функция 'rows', вероятно, не должна находиться в класс, поскольку он никогда не использует 'self'. Он полностью автономный. – RemcoGerlich

+0

, поэтому он должен быть таким же r - собственный класс или просто автономная функция? – ziggy

ответ

0

Вы называете это неправильно

PDFheader = writePDF(pdffn,hname,20,PDFdicE,10,line) 
PDFrow = PDFheader.rows(sorte,fields,530,10,530) 

После того, как вы создали экземпляр класса, вам нужно вызвать метод с созданным классом * PDFheader».

+0

Еще одно замечание: вам, вероятно, стоит взглянуть на соглашения Python Python, так что вы код немного «красивее», – Maximas

Смежные вопросы