2010-12-14 24 views
7

Zastanawiam się, czy możliwe jest dynamiczne dodawanie pól do obiektów. Na przykład, chcę, aby móc dodać coś takiego:Python: Dynamiczne dodawanie zmiennych do obiektów

user = object() 
user.first_name = 'John' 
user.last_name = 'Smith' 

Kiedy mogę wykonać to w linii poleceń Python tłumacza uzyskać:

AttributeError: 'object' object has no attribute 'first_name' 

Każdy pomysł?

Odpowiedz

14

Spróbuj tego:

class Object: 
    pass 

obj = Object() 
obj.x = 5 
+0

Dzięki, że pracował dla mnie. Mam dwa pytania 1) Co oznacza słowo kluczowe "pass"? 2) Jeśli mam inny obiekt obj2 Object() w moim kodzie, to czy obiekt obj.x utworzy obj2.x (z pewną nieokreśloną wartością)? – Rafid

+1

1) Jeśli chodzi o 'pass': http://docs.python.org/tutorial/controlflow.html#pass-statements 2) Nie, jeśli robisz" obj.x = 5 ", dodajesz tylko atrybut' x' do pojedyncza instancja obiektu 'Object'. Jeśli chcesz, aby wszystkie instancje 'Object' współużytkowały x, musisz wykonać' Object.x = 5'. – gruszczy

+0

W Pythonie nie ma czegoś takiego, jak nieokreślona wartość - najbliższy mu jest "Brak". Obiekty stworzone w sposób, jaki proponuje gruszczy, nie mają żadnego "prototypu"; możesz dowolnie dodawać i usuwać atrybuty i nie ma to wpływu na inne instancje klasy Object. –

5

Nie można przypisać atrybutom instancji takich, jak ta, object. Wyprowadź z object i użyj instancji tej klasy.

Powiązane problemy