Classes in Python

Discussion in 'Python' started by Wiebke Pätzold, Aug 4, 2003.

  1. 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
     
    Wiebke Pätzold, Aug 4, 2003
    #1
    1. Advertising

  2. On Mon, 04 Aug 2003 12:30:11 +0200, Wiebke Pätzold
    <> 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.*"))
     
    Wiebke Pätzold, Aug 4, 2003
    #2
    1. Advertising

  3. Wiebke Pätzold <> 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
     
    Alexander Schmolck, Aug 4, 2003
    #3
  4. On Mon, 04 Aug 2003 12:30:11 +0200, Wiebke Pätzold
    <> 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
     
    Wiebke Pätzold, Aug 4, 2003
    #4
  5. 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>
     
    Fredrik Lundh, Aug 4, 2003
    #5
  6. 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.
     
    Heiko Wundram, Aug 4, 2003
    #6
  7. Wiebke Pätzold

    Peter Otten Guest

    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
     
    Peter Otten, Aug 5, 2003
    #7
  8. Wiebke Pätzold

    Peter Otten Guest

    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
     
    Peter Otten, Aug 5, 2003
    #8
  9. On Tue, 05 Aug 2003 10:59:56 +0200, Peter Otten <>
    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
     
    Wiebke Pätzold, Aug 5, 2003
    #9
  10. Wiebke Pätzold

    Peter Otten Guest

    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
     
    Peter Otten, Aug 5, 2003
    #10
  11. On Tue, 05 Aug 2003 13:36:08 +0200, Peter Otten <>
    wrote:

    >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)?

    That was it, why the program did not run.
    There I could have lookedl for a long time for the error.
    Thank you very very very much that you help me with this task. It was
    very difficult for me because I am very new in Python.
    >
    >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
     
    Wiebke Pätzold, Aug 5, 2003
    #11
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. David

    Classes within classes

    David, Jul 21, 2005, in forum: ASP .Net
    Replies:
    2
    Views:
    4,966
    David
    Jul 22, 2005
  2. lonelyplanet999
    Replies:
    1
    Views:
    2,249
    VisionSet
    Nov 13, 2003
  3. Carfield Yim
    Replies:
    1
    Views:
    1,485
    Andrew Thompson
    May 31, 2004
  4. Carlo v. Dango
    Replies:
    14
    Views:
    1,065
    Alex Martelli
    Oct 19, 2003
  5. vasudevram
    Replies:
    6
    Views:
    937
    vasudevram
    Apr 24, 2013
Loading...

Share This Page