klassenattribute bekommen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

klassenattribute bekommen

Beitragvon nkoehring » Samstag 3. März 2007, 08:54

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...
BlackJack

Beitragvon BlackJack » Samstag 3. März 2007, 10:17

Kannst Du dann nicht ein Dictionary an das Session-Objekt hängen?
Ene Uran
User
Beiträge: 125
Registriert: Sonntag 17. September 2006, 20:14
Wohnort: Hollywood

Beitragvon Ene Uran » Samstag 3. März 2007, 20:02

Schau Dir mal Modul inspect an.
Atomkraftwerkaktienbesitzer
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Beitragvon nkoehring » Sonntag 4. März 2007, 09:06

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 ;)
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Beitragvon rayo » Sonntag 4. März 2007, 10:36

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
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Beitragvon nkoehring » Sonntag 4. März 2007, 11:47

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" ;)
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Re: klassenattribute bekommen

Beitragvon sape » Sonntag 4. März 2007, 16:54

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.
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Beitragvon nkoehring » Sonntag 4. März 2007, 18:27

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

Wer ist online?

Mitglieder in diesem Forum: martinjo