首页 新闻 会员 周边

python中为什么方法在类中定义的,但是内存地址却不同??

0
[已解决问题] 解决于 2018-05-18 10:59

>>> class Student(): 

def __init__(self,name,score):

self.name=name
self.score=score

def print_score(self):

print ('%s:%s'%(self.name,self.score))

>>> bart=Student('王大治',23)
>>> id(Student)
54456368  //这里是类的内存地址
>>> id(bart)
5319568  //这个是实例内存地址
>>> id(bart.print_score)
4298912 //这个是方法的内存地址。这个方法,和实例。类的内存地址都不同,为什么呢?
>>> id(bart.score)
503371152 
>>> k=23
>>> id(k)
503371152

 从上述看,变量,实例,方法 ,类,的内存地址都不同,如果在内存中,那是怎么去连接运行的呢?

游徒的主页 游徒 | 菜鸟二级 | 园豆:204
提问于:2018-05-11 11:05
< >
分享
最佳答案
0

虽然不懂什么叫 Python的内存问题,下面是help(id)的结果:

>>> help(id)
Help on built-in function id in module builtins:

id(obj, /)
Return the identity of an object.

This is guaranteed to be unique among simultaneously existing objects.

---

获取的identity就是唯一的。

类也是个内存中的对象,类对象,Python中一切皆对象。

 

“连接运行”,WHY?

奖励园豆:5
快乐的凡人721 | 老鸟四级 |园豆:3918 | 2018-05-11 11:30

等一下,我想先问个其它问题,

   实例内存中存储的是如下:    ??

class Student(): 

def __init__(self,name,score):

self.name=name
self.score=score

def print_score(self):

print ('%s:%s'%(self.name,self.score))

游徒 | 园豆:204 (菜鸟二级) | 2018-05-11 11:41
其他回答(1)
0
  1. 那个不是内存地址只是唯一识别码,可以看做是一个自增长的整数,跟内存地址无关
  2. 一切皆对象!
  3. id出来的数字跟py对象的执行没有关系,只是标识符而已。
today4king | 园豆:3499 (老鸟四级) | 2018-05-15 11:40

应该是我提的问题角度提错了,  其实 叫啥名称都无所谓, 我关心的是,此(内存地址,标识符)内存中存储的内容。比如说,变量,方法 ,类,他们存储的都是自己的代码与变量, 

   但是实例呢????,他所存储的东西呢??有三种情况: 

            他存储类的代码,方法的代码,还有变量的值。这种情况的话,那么哪些存储变量 ,方法 ,类,的内存就没有用了,他是否会自动调用析构函数进行删除。

            他没有存储代码,只存储的变量 ,方法 ,类的一个内存地址,当要使用变量时,去调用就行

            什么都没有存储,这种情况的化,是否python 中有自动的机制去找??

支持(0) 反对(0) 游徒 | 园豆:204 (菜鸟二级) | 2018-05-15 11:56

@游徒: 你说的是面向对象的实现吧,这个不只是python,很多支持面向对象的语言都有实现。关于类我说几点希望能对你有帮助,你可以把类和它的实体都看成一样的,比如你先用泥做了一个罐子0放在架子上,但是这个罐子0的作用只能用来“参照”,方便做出下一个罐子1-N,后面这些罐子都是用来使用的,比如装水,所以0不能被销毁,但是1-N可以。
变量根据不同的属性也不同,比如静态的那么所有实体都可以访问,如果不是那么每个实体自己单独一份。

支持(0) 反对(0) today4king | 园豆:3499 (老鸟四级) | 2018-05-15 13:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册