微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么“是”运算符在python的类方法中表现不同?

如何解决为什么“是”运算符在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 举报,一经查实,本站将立刻删除。