我有一个基本的词典如下:
sample = {}
sample['title'] = "String"
sample['somedate'] = somedatetimehere
Run Code Online (Sandbox Code Playgroud)
当我尝试做的时候,jsonify(sample)我得到:
TypeError: datetime.datetime(2012, 8, 8, 21, 46, 24, 862000) is not JSON serializable
我能做些什么,以便我的字典样本可以克服上述错误?
注意:虽然它可能不相关,但字典是从mongodb中检索记录生成的,当我打印输出时str(sample['somedate']),输出是2012-08-08 21:46:24.862000.
在PHP中调试时,我经常发现在我的代码中简单地插入var_dump()以向我展示变量是什么,它的值是什么,以及它包含的任何内容都是相同的.
什么是一个很好的Python相当于此?
我开始使用Python编写各种项目代码(包括Django Web开发和Panda3D游戏开发).
为了帮助我理解正在发生的事情,我想基本上"查看"Python对象内部以查看它们如何勾选 - 就像它们的方法和属性一样.
所以说我有一个Python对象,我需要打印出它的内容?这甚至可能吗?
有没有办法获取类实例上存在的属性列表?
class new_class():
def __init__(self, number):
self.multi = int(number) * 2
self.str = str(number)
a = new_class(2)
print(', '.join(a.SOMETHING))
Run Code Online (Sandbox Code Playgroud)
期望的结果是将输出"multi,str".我希望这能看到脚本各个部分的当前属性.
dir(re.compile(pattern))
Run Code Online (Sandbox Code Playgroud)
不会将模式作为列表元素之一返回.即它返回:
['__copy__', '__deepcopy__', 'findall', 'finditer', 'match', 'scanner', 'search', 'split', 'sub', 'subn']
Run Code Online (Sandbox Code Playgroud)
根据手册,它应该包含
对象的属性名称,类的属性名称,以及类的基类属性的递归.
它也说
该清单未必完整.
有没有办法完成清单?我总是认为dir会返回一个完整的列表,但显然它没有......
另外:有没有办法只列出属性?还是只有方法?
编辑:这实际上是python中的一个错误 - >据说它在3.0分支中修复(也许在2.6中)
我必须做什么才能将自定义类型的对象用作Python字典中的键(我不希望"对象id"充当键),例如
class MyThing:
def __init__(self,name,location,length):
self.name = name
self.location = location
self.length = length
Run Code Online (Sandbox Code Playgroud)
如果名称和位置相同,我想使用MyThing作为被认为相同的键.从C#/ Java我习惯于必须覆盖并提供equals和hashcode方法,并承诺不会改变hashcode所依赖的任何内容.
我必须在Python中做些什么才能实现这一目标?我应该吗?
(在一个简单的例子中,就像这里一样,或许最好只将(名称,位置)元组作为键 - 但考虑我希望键是一个对象)
我有一个类动物,有几个属性,如:
class Animal(object):
def __init__(self):
self.legs = 2
self.name = 'Dog'
self.color= 'Spotted'
self.smell= 'Alot'
self.age = 10
self.kids = 0
#many more...
Run Code Online (Sandbox Code Playgroud)
我现在想要将所有这些属性打印到文本文件中.我现在这样做的丑陋方式就像:
animal=Animal()
output = 'legs:%d, name:%s, color:%s, smell:%s, age:%d, kids:%d' % (animal.legs, animal.name, animal.color, animal.smell, animal.age, animal.kids,)
Run Code Online (Sandbox Code Playgroud)
有更好的Pythonic方法吗?
我有一个python对象,有几个属性和方法.我想迭代对象属性.
class my_python_obj(object):
attr1='a'
attr2='b'
attr3='c'
def method1(self, etc, etc):
#Statements
Run Code Online (Sandbox Code Playgroud)
我想生成一个包含所有对象属性及其当前值的字典,但我想以动态的方式进行(所以如果以后我添加另一个属性,我也不必记得更新我的函数).
在PHP中,变量可以用作键,但是python中的对象是不可编写的,如果我使用点符号,它会创建一个名为my var的新属性,这不是我的意图.
只是为了让事情更清楚:
def to_dict(self):
'''this is what I already have'''
d={}
d["attr1"]= self.attr1
d["attr2"]= self.attr2
d["attr3"]= self.attr3
return d
Run Code Online (Sandbox Code Playgroud)
·
def to_dict(self):
'''this is what I want to do'''
d={}
for v in my_python_obj.attributes:
d[v] = self.v
return d
Run Code Online (Sandbox Code Playgroud)
更新:使用属性我只是指这个对象的变量,而不是方法.
IC#我们通过反思来做到这一点.在Javascript中它很简单:
for(var propertyName in objectName)
var currentPropertyValue = objectName[propertyName];
Run Code Online (Sandbox Code Playgroud)
怎么用Python做?
如何获得可迭代的类中的所有变量的列表?有点像locals(),但对于一个类
class Example(object):
bool143 = True
bool2 = True
blah = False
foo = True
foobar2000 = False
def as_list(self)
ret = []
for field in XXX:
if getattr(self, field):
ret.append(field)
return ",".join(ret)
Run Code Online (Sandbox Code Playgroud)
这应该回来了
>>> e = Example()
>>> e.as_list()
bool143, bool2, foo
Run Code Online (Sandbox Code Playgroud) python ×10
oop ×2
attributes ×1
class ×1
debugging ×1
dictionary ×1
iteration ×1
json ×1
php ×1
properties ×1
python-3.x ×1
reflection ×1