>>> 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
从上述看,变量,实例,方法 ,类,的内存地址都不同,如果在内存中,那是怎么去连接运行的呢?
虽然不懂什么叫 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?
等一下,我想先问个其它问题,
实例内存中存储的是如下: ??
class Student():
def __init__(self,name,score):
self.name=name
self.score=score
def print_score(self):
print ('%s:%s'%(self.name,self.score))
应该是我提的问题角度提错了, 其实 叫啥名称都无所谓, 我关心的是,此(内存地址,标识符)内存中存储的内容。比如说,变量,方法 ,类,他们存储的都是自己的代码与变量,
但是实例呢????,他所存储的东西呢??有三种情况:
他存储类的代码,方法的代码,还有变量的值。这种情况的话,那么哪些存储变量 ,方法 ,类,的内存就没有用了,他是否会自动调用析构函数进行删除。
他没有存储代码,只存储的变量 ,方法 ,类的一个内存地址,当要使用变量时,去调用就行
什么都没有存储,这种情况的化,是否python 中有自动的机制去找??
@游徒: 你说的是面向对象的实现吧,这个不只是python,很多支持面向对象的语言都有实现。关于类我说几点希望能对你有帮助,你可以把类和它的实体都看成一样的,比如你先用泥做了一个罐子0放在架子上,但是这个罐子0的作用只能用来“参照”,方便做出下一个罐子1-N,后面这些罐子都是用来使用的,比如装水,所以0不能被销毁,但是1-N可以。
变量根据不同的属性也不同,比如静态的那么所有实体都可以访问,如果不是那么每个实体自己单独一份。