2014-11-29 4 views
-1

Я хочу создать класс, который имеет функцию для подсчета слов в строке, которая передается через функцию в качестве параметра (правильно ли моя терминология?). Это то, что у меня есть это дает мне ошибку «AttributeError:.„Ул“объект не имеет атрибута„предложение“Подсчитайте класс слова в python

class myHacks: 
    def __init__(self, sentence): 
     self.sentence = sentence 

    def countWords(self): 
     my_list = [] 
     my_list = self.sentence.split(" ") 
     counter = 0 
     for m in my_list: 
      counter += 1 
     return counter 

myHacks.countWords (» пожалуйста считать меня ")

+1

Вы могли бы также найдите это полезным: https://docs.python.org/3/library/collections.html#collections.Counter –

+0

Просто используйте 'collections.Counter', как @JoshSmeaton, если вы действительно не хотите изобретать колесо. – smci

+0

'' 'str.split''' возвращает список. * Встроенная функция * '' len''' вернет количество элементов в списке. Нет необходимости (явно) перебирать и накапливать счетчик. – wwii

ответ

1

Похоже, что вам нужна только функция, а не класс. Классы должны быть созданы и использоваться, когда вам нужно сделать больше, чем одну операцию над соответствующим набором данных. Для вашего одного случая использования, функция вероятно будет достаточно:

def countWords(sentence): 
    my_list = [] 
    counter = 0 
    for s in sentence: 
     counter += 1 
    return(counter) 

Кроме того, вы никогда не использовать my_list, и вы рассчитываете буквы в этом предложении, а не слово. Это, вероятно, что вам нужно вместо этого:

def countWords(sentence): 
    return len(sentence.split()) 

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

hacks = myHacks('this is my sentence') 
hacks.countWords() 
3

Вы смешиванием класс конкретизация с вызовом метода, вы должны создать экземпляр класса с правильной строкой

h = myHacks("please count me") 

, а затем вызвать метод countWords на новом объекте

h.countWords() 
Смежные вопросы