On 2:59 PM, Roelof Wobben wrote:

Hello,

Fine that you are in a arque
But can we come back to my problem.

How can I take care that test2 can be initialized.

Roelof

You had this code, and got the following error:

class zoeken() :
    pass
    def __len__(self):
        return 0
    def __str__(self):
        return test2
    def find(self, strng, ch, start, stop):
        index = start
        while index<  len(strng) and index<  stop:
            if strng[index] == ch:
                return index
            index += 1
            return -1


test = zoeken()
test.woord = "tamara"
test2 = zoeken.find(test, "a", 1,5)
print test(test2)

But now I get this message :

Traceback (most recent call last):
  File "C:\Users\wobben\workspace\oefeningen\src\test.py", line 20, in<module>
    test2 = zoeken.find(test, "a", 1,5)

TypeError: find() takes exactly 5 arguments (4 given)


The immediate answer is that
1) you are calling the find method with the class as the first argument, while it was declared with 'self'. 2) you never pass a string to be searched, so there's nothing useful to be passed to strng.

It's the second problem that causes the error, but the first one is tied with it. You can fix the immediate syntax error by passing the string explicitly.

test2 = test.find("tamara", "a", 1, 5)

The real problem though is one of design, or intent. You're assigning that "tamara" to an attribute of a particular instance of zoeken(). So did you mean that find() would look there for it? If that were the case, the find declaration should change to:


    def find(self, ch, start, stop):

and naturally, the reference to strng[index] should change to self.woord[index]

There are several things wrong with the find() method, and with the __str__() method, but the first question that needs answering is What does a zoeken (please capitalize it, to follow Python conventions) object represent? What are its data attributes going to mean? Since it's not English, I don't get a clue from the name, but normally I'd get one from the __init__() method, which you omitted. My convention is to initialize all attributes in the __init__() method, even if they're not always used. But if that's undesirable for some reason, then at least comment on them there.

DaveA
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to