В Java все находится в форме класса.
Если вы хотите использовать любой объект, тогда у вас есть две фазы:
Пример:
Object a;
a=new Object();
То же самое для концепции массива
Item i[]=new Item[5];
i[0]=new Item();
Если вы не дают секцию инициализации, тогда возникает NullpointerException
.
Обратите внимание, что лучшая практика в Python 2.7 должна использовать новый стиль классы (не нужный с Python 3), т.е.
class Foo(object):
...
кроме того, существует различие между 'объектом' и 'классом'. Для создавания словаря от произвольного объект достаточно использовать __dict__
. Обычно, Вы объявите свои методы на уровне класса и свои атрибуты на уровне экземпляра, таким образом __dict__
должен будет быть прекрасным. Например:
>>> class A(object):
... def __init__(self):
... self.b = 1
... self.c = 2
... def do_nothing(self):
... pass
...
>>> a = A()
>>> a.__dict__
{'c': 2, 'b': 1}
А лучше приближаются (предложенный [1 111] robert в комментариях), встроенное vars
функция:
>>> vars(a)
{'c': 2, 'b': 1}
, С другой стороны, в зависимости от того, что Вы хотите сделать, могло бы быть хорошо наследоваться от dict
. Тогда Ваш класс уже словарь, и если Вы хотите Вас, может переопределить getattr
и/или setattr
, чтобы звонить через и установить dict. Например:
class Foo(dict):
def __init__(self):
pass
def __getattr__(self, attr):
return self[attr]
# etc...
dir
встроенный даст Вам атрибуты всего объекта, включая специальные методы как __str__
, __dict__
и целый набор других, которых Вы, вероятно, не хотите. Но можно сделать что-то как:
>>> class Foo(object):
... bar = 'hello'
... baz = 'world'
...
>>> f = Foo()
>>> [name for name in dir(f) if not name.startswith('__')]
[ 'bar', 'baz' ]
>>> dict((name, getattr(f, name)) for name in dir(f) if not name.startswith('__'))
{ 'bar': 'hello', 'baz': 'world' }
Так может расширить это, чтобы только возвратить атрибуты данных и не методы, путем определения Вашего props
функция как это:
import inspect
def props(obj):
pr = {}
for name in dir(obj):
value = getattr(obj, name)
if not name.startswith('__') and not inspect.ismethod(value):
pr[name] = value
return pr
Я обосновался с комбинацией обоих ответов:
dict((key, value) for key, value in f.__dict__.iteritems()
if not callable(value) and not key.startswith('__'))
Для создавания словаря от произвольного объект достаточно использовать
__dict__
.
Это пропускает атрибуты, которые объект наследовал от своего класса. Например,
class c(object):
x = 3
a = c()
hasattr (a, 'x') верен, но 'x' не появляется в a. __ dict __