549 Stimmen

Auflistung der Attribute eines Objekts

Gibt es eine Möglichkeit, eine Liste von Attributen abzurufen, die auf Instanzen einer Klasse vorhanden sind?

class new_class():
    def __init__(self, number):
        self.multi = int(number) * 2
        self.str = str(number)

a = new_class(2)
print(', '.join(a.SOMETHING))

Das gewünschte Ergebnis ist, dass "multi, str" ausgegeben wird. Ich möchte dies sehen, um die aktuellen Attribute aus verschiedenen Teilen eines Skripts zu überprüfen.

99 Stimmen

Praktisch jeder in Python benennt seine Klassen wie NewClass. Du könntest die Erwartungen der Leute herausfordern, wenn du eine Benennungskonvention wie new_class verwendest.

1 Stimmen

Auch wenn es interaktiv für Menschen ist und nicht programmgesteuert verwendet werden kann, hilft die help()-Funktion bei der Beschaffung von Informationen über Klassen, Funktionen, integrierte Funktionen, Module und mehr

2 Stimmen

0voto

hygull Punkte 7822

Bitte sehen Sie sich die folgende Ausführung des Python-Shell-Skripts in Sequenz an. Es wird die Lösung von der Klassenerstellung bis zur Extrahierung der Feldnamen von Instanzen geben.

>>> class Details:
... def __init__(self, name, age):
... self.name = name
... self.age = age
... def show_details(self):
... if self.name:
... print "Name : ", self.name
... else:
... print "Name : ", "_"
... if self.age:
... if self.age > 0:
... print "Age  : ", self.age
... else:
... print "Age kann nicht -ve sein"
... else:
... print "Age  : ", "_"
...
>>> my_details = Details("Rishikesh", 24)
>>>
>>> print my_details
<<__main__.Details-Instanz at 0x10e2e77e8>>
>>>
>>> print my_details.name
Rishikesh
>>> print my_details.age
24
>>>
>>> my_details.show_details()
Name :  Rishikesh
Age  :  24
>>>
>>> person1 = Details("", 34)
>>> person1.name
''
>>> person1.age
34
>>> person1.show_details
>>
>>>
>>> person1.show_details()
Name :  _
Age  :  34
>>>
>>> person2 = Details("Rob Pike", 0)
>>> person2.name
'Rob Pike'
>>>
>>> person2.age
0
>>>
>>> person2.show_details()
Name :  Rob Pike
Age  :  _
>>>
>>> person3 = Details("Rob Pike", -45)
>>>
>>> person3.name
'Rob Pike'
>>>
>>> person3.age
-45
>>>
>>> person3.show_details()
Name :  Rob Pike
Age kann nicht -ve sein
>>>
>>> person3.__dict__
{'age': -45, 'name': 'Rob Pike'}
>>>
>>> person3.__dict__.keys()
['age', 'name']
>>>
>>> person3.__dict__.values()
[-45, 'Rob Pike']
>>>

0 Stimmen

Wir können auch die Funktionsfähigkeit jedes Attributes überprüfen. Besuchen Sie stackoverflow.com/fragen/1398022/…

-1voto

shammerw0w Punkte 1861
attribut_liste = [attribut for attribut in dir(obj) if attribut[0].islower()]

0 Stimmen

Es funktioniert nicht mit Klassenattributnamen, die mit einem Großbuchstaben oder einem einzelnen Unterstrich beginnen.

-4voto

Vivek Punkte 190

__attrs__ gibt die Liste der Attribute einer Instanz.

>>> import requests
>>> r=requests.get('http://www.google.com')
>>> r.__attrs__
['_content', 'status_code', 'headers', 'url', 'history', 'encoding', 'reason', 'cookies', 'elapsed', 'request']
>>> r.url
'http://www.google.com/'
>>>

1 Stimmen

Funktioniert nicht immer. Außerdem schreibst du __attr__ in der Beschreibung, aber benutzt __attrs__ im Code. Keines davon hat bei mir funktioniert (werkzeug.datastructures.FileStorage)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X