Welcome to the Treehouse Community

The Treehouse Community is a meeting place for developers, designers, and programmers of all backgrounds and skill levels to get support. Collaborate here on code errors or bugs that you need feedback on, or asking for an extra set of eyes on your latest project. Join thousands of Treehouse students and alumni in the community today. (Note: Only Treehouse students can comment or ask questions, but non-students are welcome to browse our conversations.)

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and a supportive community. Start your free trial today.

Python

Heidi Ulrich
Heidi Ulrich
4,624 Points

Trouble creating a class method

I have watched the video, but it's not really dawning yet. Thus I have, I expect, taken a difficult and unnecessary swing at this. Could somebody help me a little on what I should really do?

morse.py
class Letter:
    def __init__(self, pattern=None):
        self.pattern = pattern

    def __iter__(self):
        yield from self.pattern

    def __str__(self):
        output = []
        for blip in self:
            if blip == '.':
                output.append('dot')
            else:
                output.append('dash')
        return '-'.join(output)

    @classmethod
    def from_string(cls, string):
        pattern = []
        if string:
            while len(string) > 0:
                if string.endswith('dot'):
                    pattern.append['.']
                    del string[:-4]
                    continue
                if string.endswith('dash'):
                    pattern.append['_']
                    del string[:5]
                    continue
        return list(reversed(pattern))

class S(Letter):
    def __init__(self):
         pattern = ['.', '.', '.']
         super().__init__(pattern)
Venkat SOMALARAJU
Venkat SOMALARAJU
2,448 Points

I tried the following code, still no luck.

<p>
class Letter:
    def __init__(self, pattern=None):
        self.pattern = pattern

    def __iter__(self):
        for item in self.pattern:
        yield item

    def __str__(self):
        output = []
        for blip in self:
            if blip == '.':
                output.append('dot')
            else:
                output.append('dash')
        return '-'.join(output)
    @classmethod
    def from_string(cls,string=None):
        pattern1 = []
        new_list = string.split("-")
        for item in new_list:
            if item == "dash":
                pattern1.append("_")
            if item == "dot":
                pattern1.append(".")

        return cls(pattern1)

class S(Letter):
    def __init__(self):
        pattern = ['.', '.', '.']
        super().__init__(pattern)

</p>

Could share your thoughts?

2 Answers

Chris Freeman
MOD
Chris Freeman
Treehouse Moderator 67,989 Points

There are two errors I see:

  • The challenge error of TypeError: 'builtin_function_or_method' object is not subscriptabe is caused by using square brackets instead of parens when calling the method pattern.append('_')

  • fixing this lead to: TypeError: 'str' object does not support item deletion is caused by the statements del string[:5]. Strings are immutable, that is, they cannot be changed, or sliced, in this case.

Post back after fixing these if you need more help. Good luck!!

Heidi Ulrich
Heidi Ulrich
4,624 Points

Ah, I fixed this today, in a breeze - and I took out all of the code that creates that weird list with dels and such. I just suddenly had it. But now I go back to the editor, it only shows the pre-state of when I hadn't typed it in... I'm sorry I don't have it offline saved somewhere.

I passed the challenge, but err... I cannot reproduce the code to help others. Sorry, failure of Treehouse here.