如何解决为什么“是”运算符在python的类方法中表现不同?
class s:
a = 0
def obj(self):
pass
@classmethod
def cla(cls):
pass
@staticmethod
def sta():
pass
t = s()
print(t.a is s.a)
print(t.obj is s.obj)
print(t.cla is s.cla)
print(t.sta is s.sta)
print(id(t.a),id(s.a))
print(id(t.obj),id(s.obj))
print(id(t.cla),id(s.cla))
print(id(t.sta),id(s.sta))
print(id(t.a) == id(s.a))
print(id(t.obj) == id(s.obj))
print(id(t.cla) == id(s.cla))
print(id(t.sta) == id(s.sta))
在上面的程序中,cla()是一个类方法。 classmethod 在类中创建一次,而不是在它的对象中创建。同时检查类中类方法的地址与其对象是否相同。我发现了一些奇怪的东西。
当我看到类及其对象的类方法的地址时,它们打印了相同的地址。
print(id(t.cla),id(s.cla)) # both printed address are same 1944310966664 1944310966664
我再次检查这两个类方法的 id 上的等于运算符。它打印了 True。
print(id(t.cla) == id(s.cla)) # it print true
但是当我用 is 运算符尝试这个时,打印出错误。
print(t.cla is s.cla) # it print false
我真的不知道为什么会这样。 is 运算符还检查两个 id 是否相同。 请任何人帮助我。
预先感谢您花时间消除我的疑问。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。