2014-11-29 3 views
1

Я написал этот класс:классов Python нет ошибок атрибута

class Bmi(object): 

    def __init__(self,regel): 
     self.persoon = regel 
     self.lengte = [] 
     self.gewicht =[] 

    def parse_input(self,regels):   
     for regel in regels: 
      lengte = regel.split('\t')[2] 
      gewicht = regel.split('\t')[3] 
     self.lengte = lengte 
     self.gewicht = gewicht 
     return self.lengte, self.gewicht 

Я хочу использовать его для разбора ввода, который выглядит, как это, чтобы получить длину и вес каждого человека:

Dean Johnson M 1.78 83 
Sophia Miller V 1.69 60 

Моя программа выглядит следующим образом:

from ipy_lib import file_input 
from BMI import Bmi 

bestand = file_input() 
for i in bestand: 
    Bmi(i) 
    i.parse_input() 

я AttributeError: «ул» объект не имеет атрибута «parse_input». Что здесь не так, и что означает ошибка?

+2

'bmi = Bmi (i); bmi.parse_input (...) '? – falsetru

+0

это работает. Но теперь я получаю эту ошибку: TypeError: parse_input() принимает ровно 2 аргумента (1 данный) – Pieter

+0

что такое лучший и переменный контент? – xecgr

ответ

0

Что об использовании стандартного питона, чтобы решить вашу проблему ввода?

from BMI import Bmi 
with open('path.to.file') as f_in: 
    for line in f_in: 
     bmi = Bmi(line.split("\t")[0]) #pass the person's name 
     bmi.parse_input(line)   #pass all the line, and parse_input will do the stuff 
0

iявляется a string. Что еще это будет? Это символ с пользовательского ввода.

Ваш код принимает эту строку, создает экземпляр объекта Bmi вместе с ним, а затем немедленно удаляет этот объект и пытается вызвать parse_input в исходной строке.

Вместо этого вы должны назначить Bmi новой переменной и вместо этого вызвать parse_input.

+0

Не могли бы вы привести пример того, как это сделать? – Pieter

0

Как вы считаете, фальцеру вы вызываете метод parse_input на объект Bmi, но вы вызываете его на i, что является строкой.

Вы, вероятно, предпочли бы сделать это таким образом:

from ipy_lib import file_input 
from BMI import Bmi 

bestand = file_input() 
for i in bestand: 
    bmi = Bmi(i) 
    bmi.parse_input(i) 
+0

Когда я делаю это, я получаю эту ошибку: TypeError: parse_input() принимает ровно 2 аргумента (1 задано) – Pieter

+0

Я отредактировал свой ответ, 'parse_input' принимает два параметра:' self' и 'regels'. 'self' - это объект, на который вызывается метод, вам не нужно передавать его в качестве параметра. Я полагаю, что 'regels' - это строка, которую разбирает объект' Bmi', поэтому в этом случае вам нужно вызвать 'bmi.parse_input (i)'. – flure

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