所以我在这里寻找的是像PHP的print_r函数.这样我就可以通过查看相关对象的状态来调试我的脚本.
python debugging introspection pretty-print python-datamodel
在Python中比较某些对象的两个实例是否相同的最佳方法是什么?我希望能够做类似的事情
例:
class MyClass:
def __init__(self, foo, bar):
self.foo = foo
self.bar = bar
Run Code Online (Sandbox Code Playgroud)
编辑:
进一步澄清这个问题.我想通过属性值进行比较,并制作一个更通用的解决方案
x = MyClass('foo', 'bar')
y = MyClass('foo', 'bar')
Run Code Online (Sandbox Code Playgroud)
MyClass方法看起来应该是这样的吗?
>>> x == y
False
Run Code Online (Sandbox Code Playgroud) 我必须做什么才能将自定义类型的对象用作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中做些什么才能实现这一目标?我应该吗?
(在一个简单的例子中,就像这里一样,或许最好只将(名称,位置)元组作为键 - 但考虑我希望键是一个对象)
我是Python的新手,我似乎无法理解这一点.考虑这个简单的Python代码.
class point:
i = 34
test = point()
test.y = 45
print test.y
Run Code Online (Sandbox Code Playgroud)
正如你所看到的那样,我称之为测试点,但是test.y = 45当y不是点类的数据成员时就这样做了.没有抛出任何错误,y属性似乎已自动添加到类中.
为什么会这样?这不是一个错误吗?或者我错过了一些非常基本的东西.使用C++无法做同样的事情,它会引发编译器错误.有什么理由这个奇怪的功能?
我看到这个问题关于SO Prevent在init之外创建新属性,它展示了如何防止向类的对象添加新属性。
我希望整个类甚至整个加载的模块具有相同的行为。
示例类:
class Klass:
a = 0
b = 1
Run Code Online (Sandbox Code Playgroud)
另一个模块:
from Klass import Klass
Klass.c = 2 # this should raise an error
Run Code Online (Sandbox Code Playgroud)
这可能吗?