Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Classes in Python

Reply
Thread Tools

Classes in Python

 
 
Wiebke Pätzold
Guest
Posts: n/a
 
      08-04-2003
Hi all!

Could somebody help me with a task?

import sys
import Mk4py
import re

db = Mk4py.storage("c:\\datafile.mk",1)
vw = db.view("people")

class PatternFilter:
def _init_(self, pattern):
self.pattern = re.compile(pattern)

def _call_(self, row):
try:
nachname = row.Nachname
except AttributeError:
return 0
return self.pattern.search(nachname)is not None

vf = vw.filter(PatternFilter("Ge.*"))

for r in vf:
print vw[r.index].Nachname



I wrote this program, but it returns nothing. I can't find the error.
Can somebody help me?
Can somebody tell me why the part: "class PatternFilter:" doesn't
return the expressions it should return?

Wiebke
 
Reply With Quote
 
 
 
 
Wiebke Pätzold
Guest
Posts: n/a
 
      08-04-2003
On Mon, 04 Aug 2003 12:30:11 +0200, Wiebke Pätzold
<(E-Mail Removed)> wrote:

>Hi all!
>
>Could somebody help me with a task?
>
>import sys
>import Mk4py
>import re
>
>db = Mk4py.storage("c:\\datafile.mk",1)
>vw = db.view("people")
>
>class PatternFilter:
> def _init_(self, pattern):
> self.pattern = re.compile(pattern)
>
> def _call_(self, row):
> try:
> nachname = row.Nachname
> except AttributeError:
> return 0
> return self.pattern.search(nachname)is not None
>
>vf = vw.filter(PatternFilter("Ge.*"))
>
>for r in vf:
> print vw[r.index].Nachname
>
>
>
>I wrote this program, but it returns nothing. I can't find the error.
>Can somebody help me?
>Can somebody tell me why the part: "class PatternFilter:" doesn't
>return the expressions it should return?
>
>Wiebke



It has to be something wrong with line:
vf = vw.filter(PatternFilter("Ge.*"))

 
Reply With Quote
 
 
 
 
Alexander Schmolck
Guest
Posts: n/a
 
      08-04-2003
Wiebke Pätzold <(E-Mail Removed)> writes:

> Hi all!
>
> Could somebody help me with a task?


I don't know what exactly you're trying to do (I don't know Mk4py), but...

>
> import sys
> import Mk4py
> import re
>
> db = Mk4py.storage("c:\\datafile.mk",1)
> vw = db.view("people")
>
> class PatternFilter:
> def _init_(self, pattern):

__init__

> self.pattern = re.compile(pattern)
>
> def _call_(self, row):

__call__

> try:
> nachname = row.Nachname
> except AttributeError:
> return 0
> return self.pattern.search(nachname)is not None
>
> vf = vw.filter(PatternFilter("Ge.*"))


Before posting this, you should really have tried something like:

class Dummy:
Nachname = 'Some name'
PatternFilter("Ge.*")(Dummy)

>
> for r in vf:
> print vw[r.index].Nachname
>
>
>
> I wrote this program, but it returns nothing. I can't find the error.


Well, given the two errors I found, it would seem strange to me that it
vw.filter doesn't moan about PatternFilter("Ge.*") being not callable.


> Can somebody help me?
> Can somebody tell me why the part: "class PatternFilter:" doesn't
> return the expressions it should return?



'as
 
Reply With Quote
 
Wiebke Pätzold
Guest
Posts: n/a
 
      08-04-2003
On Mon, 04 Aug 2003 12:30:11 +0200, Wiebke Pätzold
<(E-Mail Removed)> wrote:

>Hi all!
>
>Could somebody help me with a task?
>
>import sys
>import Mk4py
>import re
>
>db = Mk4py.storage("c:\\datafile.mk",1)
>vw = db.view("people")
>
>class PatternFilter:
> def _init_(self, pattern):
> self.pattern = re.compile(pattern)
>
> def _call_(self, row):
> try:
> nachname = row.Nachname
> except AttributeError:
> return 0
> return self.pattern.search(nachname)is not None
>
>vf = vw.filter(PatternFilter("Ge.*"))
>
>for r in vf:
> print vw[r.index].Nachname
>
>
>
>I wrote this program, but it returns nothing. I can't find the error.
>Can somebody help me?
>Can somebody tell me why the part: "class PatternFilter:" doesn't
>return the expressions it should return?


I create a database that contains a table. 'Nachname' and
'Kongressbereich' are special fieldnames. This program can search for
a special letter. In my example it is 'G'. and the search takes place
in 'Nachname'.
Mow I want to use regular expression. So that I can limit my search.
For example: I can search for Ge and it is not relevant wich letters
follow
>
>Wiebke


 
Reply With Quote
 
Fredrik Lundh
Guest
Posts: n/a
 
      08-04-2003
Wiebke Pätzold wrote:

> class PatternFilter:
> def _init_(self, pattern):
> self.pattern = re.compile(pattern)
>
> def _call_(self, row):
> try:
> nachname = row.Nachname
> except AttributeError:
> return 0
> return self.pattern.search(nachname)is not None
>
> vf = vw.filter(PatternFilter("Ge.*"))
>
> for r in vf:
> print vw[r.index].Nachname
>
> I wrote this program, but it returns nothing. I can't find the error.
> Can somebody help me?
> Can somebody tell me why the part: "class PatternFilter:" doesn't
> return the expressions it should return?


note that built-in hooks like __init__ and __call__ uses *two* underscores
on each side of the keyword.

not sure why vw.filter doesn't give you an exception, but your Pattern-
Filter instance is neither initialized nor callable.

</F>




 
Reply With Quote
 
Heiko Wundram
Guest
Posts: n/a
 
      08-04-2003
On Mon, 2003-08-04 at 12:30, Wiebke Pätzold wrote:
> class PatternFilter:
> def _init_(self, pattern):
> self.pattern = re.compile(pattern)


Python special functions are always prefixed/postfixed by two
underscores, so let this read __init__

> [snip]
> vf = vw.filter(PatternFilter("Ge.*"))


Moans here with a "__init__ takes only one argument, got two instead",
when I try to run it. Next time you post code, read the error message,
and this should've pointed you at the fact that _init_ isn't called, but
__init__ is.

When this was corrected, Metakit would've moaned that the filter wasn't
callable, this would've made you look up the syntax for callable in the
Python documentation http://www.python.org/doc/current/, which would've
led you to the documentation on callable instances having a __call__
method.

And so on. Next time you post something, please include the correct
error message (this program doesn't run at all, of course this means it
doesn't return anything, but the exception traceback would've been
helpful), and having a look at the Python documentation before posting
can't harm too...

Heiko.


 
Reply With Quote
 
Peter Otten
Guest
Posts: n/a
 
      08-05-2003
Wiebke Pätzold wrote:

> Could somebody help me with a task?


As You seem to know not much about Python, instead of messing around
with classes I would recommend the simplest aproach I can think of (not
knowing the Mk4py package), which would be:

<not tested>
import Mk4py
db = Mk4py.storage("c:\\datafile.mk", 1)
vw = db.view("people")

for r in vw:
nachname = vw[r.index].Nachname
if nachname.startswith("Ge"):
print nachname
</not tested>

If this works, take it for now, and if you can spare some time,
read the Python tutorial (It's very good).
You can always refine your code, once it is running

Peter
 
Reply With Quote
 
Peter Otten
Guest
Posts: n/a
 
      08-05-2003
Judging from the Getting started section in
http://www.equi4.com/metakit/python.html,
vw[r.index] seems redundent, so

<not tested>
import Mk4py
db = Mk4py.storage("c:\\datafile.mk", 1)
vw = db.view("people")

for r in vw:
if r.Nachname.startswith("Ge"):
print r.Nachname
</not tested>

would be the code to go with.
Less code == fewer occasions for errors,
and it might even run faster

Peter
 
Reply With Quote
 
Wiebke Pätzold
Guest
Posts: n/a
 
      08-05-2003
On Tue, 05 Aug 2003 10:59:56 +0200, Peter Otten <(E-Mail Removed)>
wrote:

>Judging from the Getting started section in
>http://www.equi4.com/metakit/python.html,
>vw[r.index] seems redundent, so
>
><not tested>
>import Mk4py
>db = Mk4py.storage("c:\\datafile.mk", 1)
>vw = db.view("people")
>
>for r in vw:
> if r.Nachname.startswith("Ge"):
> print r.Nachname
></not tested>
>
>would be the code to go with.
>Less code == fewer occasions for errors,
>and it might even run faster
>
>Peter


Hi Peter,

it's great that you give yourself so much trouble. But want to create
this program by classes.
The programm that I create with functions is OK.
Here is it. Perhaps it may help you.
import sys
import Mk4py
import re

db = Mk4py.storage("c:\\datafile.mk",1)
vw = db.view("people")

pattern = re.compile("ra.*")

def func(row):
try:
nachname = row.Nachname
except AttributeError:
return 0
return pattern.search(nachname) is not None

vf = vw.filter(func)

for r in vf:
print vw[r.index].Nachname



Now I trid to create this program by classes:

import sys
import Mk4py
import re

db = Mk4py.storage("c:\\datafile.mk",1)
vw = db.view("people")

class PatternFilter:
def __init__(self, pattern):
self.pattern = re.compile(pattern)

def __call__(self, row):
try:
nachname = row.Nachname
except AttributeError:
return 0
return self.pattern.search(nachname)is not None

vf = vw.filter(PatternFilter("Ge.*"))

for r in vf:
print vw[r.index].Nachname

But here I get an error: returned exit code 0.

So I think that something is wrong with line:
vf = vw.filter(PatternFilter("Ge.*"))

My task is:
I create a database that contains a table. For example'Nachname'
This is a special fieldname. This program can search for
a special letter. In my example it is 'G'. and the search takes place
in 'Nachname'.
Now I want to use regular expression. So that I can limit my search.
For example: I can search for Ge and it is not relevant wich letters
follow. And it should be solve under use classes.

Wiebke


 
Reply With Quote
 
Peter Otten
Guest
Posts: n/a
 
      08-05-2003
Wiebke Pätzold wrote:

> So I think that something is wrong with line:
> vf = vw.filter(PatternFilter("Ge.*"))


The PatternFilter class looks OK now, and so does the line you suspect to be
wrong. Are you sure there are any records in the database with Nachname
containing Ge (and not GE or ge)?

The only difference I could spot:
- with the function you are looking for Nachname(n), that contain "ra"
- with the class you are looking for Nachname(n) that contain "Ge"

Being no regular expressions expert, I think that appending ".*" here has no
effect for your purpose (If you want Nachname to start with Ge, the
expression should be "^Ge").

> But here I get an error: returned exit code 0.

What's that? Please cut and paste the exact output.

Peter

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Classes within classes David ASP .Net 2 07-22-2005 07:13 PM
Modifiers applied to attributes, local variables, member functions, classes and inncer classes ! Razvan Java 11 07-17-2004 08:57 PM
Can I using reflection to get all child classes or classes undera package dynamically? Carfield Yim Java 1 05-31-2004 05:33 PM
How to access inner classes variables & methods from outer classes lonelyplanet999 Java 1 11-13-2003 01:54 PM
inner classes in python as inner classes in Java Carlo v. Dango Python 14 10-19-2003 08:49 AM



Advertisments