比较好奇继承特性的实现,但是搜到的观点是:继承就是 copy and paste. 但是子类的__dict__中并不存在父类的方法名称。如何能确定它的继承机制呢?有看过 C 源码的大牛能解释下吗?
|
zhuangzhuang1988Jan 17, 2017
1
|
|
ryd994Jan 17, 2017 via Android
2
难道不是先尝试自己的方法列表,找不到就直接找到父类然后由父类处理么?
|
|
3
@ryd994 假设有一父类 A:
class A(object) : def prt(self) : print type(self) 还有一子类 B ,继承 A class B(A) :pass B().prt ()输出说明此时 self 代表 B 类实例。继承过程是怎样使得 prt 的 self 指向 B 实例的? |
|
4
@zhuangzhuang1988 多谢
|
|
wwqgtxxJan 17, 2017 via iPhone
5
|
|
6
@wwqgtxx B. __duct__中并没有 A.__dict__的内容
|
|
wwqgtxxJan 17, 2017 via iPhone
7
@noobsheldon 他在他的内部执行就行了,不一定要表现出来呀
|
|
wwqgtxxJan 17, 2017 via iPhone
8
而且你上面说到的
继承过程是怎样使得 prt 的 self 指向 B 实例的 self 本身就是一种指针, python 解析器实际上是调用 A.prt(self)的,所以这种实现是自然而然的 |
|
glogoJan 17, 2017
9
直接翻开 Python 源码看吧
|
|
ryd994Jan 18, 2017 via Android
10
@noobsheldon 你只看到 self 不代表解释器只看到 self
解释器内部变量多一个而已 更何况 self 其实是解释器在运行时给赋值的一个参数,把 self 全部换成 foo bar 一样能用 |
|
deletedJan 18, 2017 via Android
11
Cython 不是 cpython 吧
|
|
12
@deleted 这只是叫法问题啊!也有叫 Cpython 的啊
|
|
13
@ryd994 不是这个意思,我知道随便换个名字都能用!
|