我想知道Python如何处理用户定义的对象。下面是一个场景:
我已经创建了自己的类MyClass:
class MyClass():
def __init__(self):
# some code here
class MyClassContainer():
def __init__(self):
self.container = [] # will store MyClass object instances.
def Add(self, object):
self.container.append(object)
def Remove(self, object):
self.container.remove(object)
example = MyClassContainer()
myclass1 = MyClass()
example.Add(myclass1)
myclass2 = MyClass()
example.Add(myclass2)
example.Remove(myclass1)
那么问题是,python的remove函数是否能够区分同一类的不同对象实例呢?是否有任何角落的情况下,将不会唯一地确定对象实例我想删除?你知道吗
一种可能的情况是:
myclass1 = MyClass(5)
example.Add(myclass1)
myclass1 = MyClass(3)
example.Add(myclass1)
example.Remove(myclass1)
将删除哪个对象实例?我猜是通过了3,但是有没有一条规则说,python唯一地标识同一类的对象实例?你知道吗
list.remove()
删除测试等于的第一个对象。从documentation:默认情况下,自定义类的实例只有在它们是完全相同的对象时才测试相等;如果
s[i] is x
返回true,则s[i] == x
也返回true。你知道吗定义实例的不是变量名;在第二个示例中,它将是从列表中删除的} function 检查这一点,它在CPython上基本上返回当前内存地址:
MyClass(3)
实例,因为它是一个唯一的对象,不同于之前创建和添加的MyClass(5)
实例。您可以用^{请注意,自定义类的默认表示形式包括
id()
十六进制值!你知道吗您可以通过重写^{} method 来改变这种行为;让它根据您自己的条件返回
True
或False
,或者如果另一个对象不是您的类所支持的比较类型,则返回NotImplemented
单例(这样Python就可以委托给另一个对象)。你知道吗例如,当实例的
number
属性相等时,如果实例应该被认为是相等的,则可以这样实现:有了这个改变,你可以做到:
这将删除
number
设置为42
的实例。你知道吗相关问题 更多 >
编程相关推荐