繁体   English   中英

Python 实例方法

[英]Python instance methods

我为一个占据我脑海的问题感到羞耻,如果可能并且你有机会,谢谢你的回答:当我们创建一个类的实例时,那个实例对象的方法,特别是那个实例,是用实例(对象)或者我的意思是运行一个方法,该方法在带有对象参数的类中的地址被称为方法类,如果不这样做,它不会导致内存消耗? 我对这个主题做了很多研究,但我并没有被逮捕多少,我编写并执行了以下代码:

class a:
    def func1(self,name):
        print("hello")
        
b=a()
c=a()
print(id(a.func1))
print(id(b.func1))
print(id(c.func1))

我从最后两行得到的地址是完全一样的。 输出是这样的:76767678900 87665677888 87665677888

为什么最后两个地址是一样的? 非常感谢

第一个地址对应于原始函数(你在类上访问它,所以它没有绑定它,你只是看到原始函数本身被分配的地址)。

另外两个(相同)地址是绑定方法对象。 您立即释放了它分配的绑定方法,CPython 同时使用了每个类型的空闲列表(不确定这里是否涉及)和一个小对象分配器,如果您要求相同数量的内存,它会经常返回刚刚释放的相同内存此后立即。 如果您从绑定方法中提取了底层函数,例如:

print(id(b.func1.__func__))

您会看到它与a.func1相同(并且该值将是稳定的,每次绑定它们时绑定方法的地址可能不同)。

简而言之, id仅在程序中的当前对象集内是唯一的; 如果您释放其中一个对象,则其id可能会立即附加到其他新分配的对象上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM