Seite 1 von 1

klassenattribute bekommen

Verfasst: Samstag 3. März 2007, 08:54
von nkoehring
ich weiß nicht... ich bin voll der Meinung das schonmal gefragt zu haben, aber ich hab nix gefunden...

Naja, also auf ein Neues (achja, guten morgen uebrigens ;) ):

Ich wuerde gern die Elemente einer Klasse haben... aber nicht nur als String (also mit dir() ), sondern ich moechte schon auch gern wissen, ob es ne Methode oder ein Attribut ist. Da gibts doch sicherlich einen Weg und den habe ich hier bestimmt schonmal gelesen... aber naja, ich find es einfach nicht :(

Ach falls Fragen zum Verwendungszweck aufkommen:

Ich wuerde gern ein Sessionobjekt (bei Karrigell) mit zusaetzlichen Informationen wie Name/Adresse/whatever fuettern. Da es aber nicht nur drei oder vier Attribute werden, wuerde ich sie gern per Schleife durchgehen koennen...

Verfasst: Samstag 3. März 2007, 10:17
von BlackJack
Kannst Du dann nicht ein Dictionary an das Session-Objekt hängen?

Verfasst: Samstag 3. März 2007, 20:02
von Ene Uran
Schau Dir mal Modul inspect an.

Verfasst: Sonntag 4. März 2007, 09:06
von nkoehring
BlackJack hat geschrieben:Kannst Du dann nicht ein Dictionary an das Session-Objekt hängen?
Das waere auch machbar, ja. Das macht mich zwar nicht unbedingt gluecklick... aber notfalls mache ich es einfach so.
Ene Uran hat geschrieben:Schau Dir mal Modul inspect an.
Danke fuer den Tipp... das Modul ist nett... aber so richtig hat es scheinbar nix, was mir wirklich nur die Argumente einer Klasse zurueckgibt, die nicht zum Standard gehoeren. getmembers(object, predicate) waere dabei ja nett, aber sie bringt mir nix, da ich sie nicht mehr braeuchte, wenn ich wuesste, wie das predicate fuer die Sachen auszusehen haette, die ich suche ;)

Verfasst: Sonntag 4. März 2007, 10:36
von rayo
Hi

So könntest du es testen, aber wirklich sinnvoll ist das nicht.
Warum macht dich ein Dictionary nicht glücklich?

Code: Alles auswählen

import types

class test(object):

    def method1(self, bla):
        pass


def andere_funktion(test):
    pass

t = test()
t.name = 'Hans'
t.land = 'Deutschland'
t.andere_methode = andere_funktion

for x in dir(t):
    if not x.startswith('__'):
        if type(getattr(t,x)) not in (types.MethodType, types.FunctionType):
            print x,type(getattr(t,x))
Gruss

Verfasst: Sonntag 4. März 2007, 11:47
von nkoehring
rayo hat geschrieben:Hi

So könntest du es testen, aber wirklich sinnvoll ist das nicht.
Warum macht dich ein Dictionary nicht glücklich?
Weil das die Sache noch mehr verlaengert ^^
Ich vermute aber, dass ein Dict am Ende unausweichlich sein wird...

Aber danke fuer den Tipp mit "types" ;)

Re: klassenattribute bekommen

Verfasst: Sonntag 4. März 2007, 16:54
von sape
nkoehring hat geschrieben: Ich wuerde gern die Elemente einer Klasse haben... aber nicht nur als String (also mit dir() ), sondern ich moechte schon auch gern wissen, ob es ne Methode oder ein Attribut ist.
Hi.

Hier mal ein Beispiel um zu testen ob es eine Methode ist:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from inspect import getmembers, ismethod

class Foo(object):
    def __init__(self):
        self.instance_attr = None
        for attr in getmembers(self):
            if not attr[0].startswith('__') and ismethod(attr[1]):
                print attr
        
    def class_meth1(self):
        pass
    def class_meth2(self):
        pass
    def class_meth3(self):
        pass

foo = Foo()
``ismethod`` ist ein von vielen. Es gibt in ``inspect`` auch Funktionen mit den du testen kannst ob es eine Funktion ist, ein Klasse, etc.

http://docs.python.org/lib/module-inspect.html

€: Korrektur.

Verfasst: Sonntag 4. März 2007, 18:27
von nkoehring
Ja und das umkehren und ich bekomme die Attribute... richtig? Naja, im moment befasse ich mich mit anderen Problemen meines Programmes... aber danke ich werd mir spaeter nochmal alles zu Gemuete fuehren ;)