相关疑难解决方法(0)

是否有内置函数来打印对象的所有当前属性和值?

所以我在这里寻找的是像PHP的print_r函数.这样我就可以通过查看相关对象的状态来调试我的脚本.

python debugging introspection pretty-print python-datamodel

876
推荐指数
18
解决办法
75万
查看次数

通过Python中的属性比较对象实例是否相等

在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 equality

219
推荐指数
7
解决办法
19万
查看次数

自定义类型的对象作为字典键

我必须做什么才能将自定义类型的对象用作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 dictionary

179
推荐指数
4
解决办法
9万
查看次数

从函数定义外部向Python类添加数据成员

我是Python的新手,我似乎无法理解这一点.考虑这个简单的Python代码.

class point:
   i = 34


test = point()
test.y = 45

print test.y 
Run Code Online (Sandbox Code Playgroud)

正如你所看到的那样,我称之为测试点,但是test.y = 45y不是点类的数据成员时就这样做了.没有抛出任何错误,y属性似乎已自动添加到类中.

为什么会这样?这不是一个错误吗?或者我错过了一些非常基本的东西.使用C++无法做同样的事情,它会引发编译器错误.有什么理由这个奇怪的功能?

python class

7
推荐指数
2
解决办法
3870
查看次数

防止为类或模块创建新属性

我看到这个问题关于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)

这可能吗?

python

3
推荐指数
1
解决办法
1180
查看次数