我的理解正确吗:实例的方法放在类对象里,每当实例要调用实例方法时,就去类对象的内存里调用。
1
neoblackcap 2016-03-23 17:24:30 +08:00
看情况,实践证明, Python 的实例方法不是,都是一个。
|
2
UtopiaCHN OP @neoblackcap 我意思也是一个,你是怎么证明都是一个的
|
3
zwl2012 2016-03-23 19:41:08 +08:00 via iPhone
通过指针?
|
4
domty 2016-03-23 19:45:29 +08:00
Java 好像是有专门的一个地方叫方法区去存这些方法的。
还有类和对象应该是两个概念吧。类对象是指什么。 还有一点你说的东西应该是涉及到程序语言的内存模型,不同的程序语言应该会有不同。比如 JavaScript 中函数本身也是一个对象。 |
5
billlee 2016-03-23 20:35:20 +08:00
C++ 里方法放在代码段,每当要调用非虚函数时时,编译器把代码段里的地址填到调用处;调用虚函数时,先查虚函数表,虚函数表里是对应的实现函数在代码段里的地址(即函数指针)。
@domty 有些动态语言,类也是类似对象的,比如 python 的类就可以赋值给变量,然后那个变量就可以当类用了 |
6
alexapollo 2016-03-23 21:18:07 +08:00
大部分语言实现是不会复制的
|
7
neoblackcap 2016-03-23 22:10:05 +08:00
@UtopiaCHN
``` # coding=utf-8 if __name__ == '__main__': class Animal(object): def bark(self): pass dog = Animal() wolf = Animal() if id(dog.bark) == id(wolf.bark): print('Different method of instance from same class are same') else: print('Different method of instance from same class are different') ``` |
8
gamexg 2016-03-24 08:45:20 +08:00
即使很特殊的情况也只是复制一个函数指针,没有碰到会复制代码的情况。
|