鱼C论坛

 找回密码
 立即注册
查看: 3229|回复: 2

[已解决]python 关于类的实例方法的问题

[复制链接]
发表于 2022-4-30 08:59:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#通过程序运行,打印后第1处A()函数的id值和第2处A()函数的id值为什么不一样,一个函数地址应该一样啊?
class MyClass:
        def __init__(self):
                self.A() 
        def A(self):
                print(id(self.A))  #第1处
        
        def B(self):
                print('我是B')
                
a= MyClass.__dict__['A']
print(id(a))  #第2处
foo = MyClass()
最佳答案
2022-4-30 10:18:31


试着运行下这个代码:
class MyClass:
    def __init__(self):
        self.A()


    def A(self):
        print(id(self.A), type(self.A))

    def B(self):
        print('我是B')


print(id(MyClass.A), type(MyClass.A))
print("----------------"*2)
a = MyClass.__dict__['A']
print(id(a), type(a))
print("----------------"*2)
foo = MyClass()

运行结果:
1334136322368 <class 'function'>
--------------------------------
1334136322368 <class 'function'>
--------------------------------
1334129893248 <class 'method'>

从上可以看出,类中定义的实例方法 A ,属于 function,而实例化后的 A 实例方法,变成了 method 方法

所以两者上是有区别的,我个人认为,类中的 A 方法,属于一种 “模板”,后续实例化的对象,都指向实例化后的新建的实例化方法 A ,所以导致地址不同

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-30 10:18:31 | 显示全部楼层    本楼为最佳答案   


试着运行下这个代码:
class MyClass:
    def __init__(self):
        self.A()


    def A(self):
        print(id(self.A), type(self.A))

    def B(self):
        print('我是B')


print(id(MyClass.A), type(MyClass.A))
print("----------------"*2)
a = MyClass.__dict__['A']
print(id(a), type(a))
print("----------------"*2)
foo = MyClass()

运行结果:
1334136322368 <class 'function'>
--------------------------------
1334136322368 <class 'function'>
--------------------------------
1334129893248 <class 'method'>

从上可以看出,类中定义的实例方法 A ,属于 function,而实例化后的 A 实例方法,变成了 method 方法

所以两者上是有区别的,我个人认为,类中的 A 方法,属于一种 “模板”,后续实例化的对象,都指向实例化后的新建的实例化方法 A ,所以导致地址不同

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-30 13:13:34 | 显示全部楼层
self被偏函数了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-27 11:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表