python 虚函数问题
时间:2011-09-18
来源:互联网
Python code
def __initIndexs(self): print 'root'
子类重载它:
Python code
def __initIndexs(self): print 'leaf'
父类中有一个函数 initialization ,调用了 self.__initIndexs 我发现这一点上和C++有很大不同
通过子类来调用 initialization 也是父类中的 initIndexs 被调用
希望有高手解答这是为什么(原理上),并且指点下我该怎么做?
作者: wwwwfly 发布时间: 2011-09-18
我试过这样可以:
父类中:
Python code
def initialization(self): self.indexs = self.__initIndexs()
子类:
Python code
def initialization(self): root.initialization(self) self.indexs = self.__initIndexs()
这样倒也满足要求,但是我觉得肯定有更好的方法。
作者: wwwwfly 发布时间: 2011-09-18
说清楚你希望得到什么样的结果,你实际得到的是什么样的结果。
另外Python里没有什么虚函数什么重载,别使用C++里的术语,这会让读者觉得很困惑。
作者: iambic 发布时间: 2011-09-18
必须明确调用的方法名是父类还是子类,如果不指定默认调用当前类。
作者: WaistCoat08 发布时间: 2011-09-18
用_前缀或者不用特殊前缀就行了。看下面的例子。
Python code
>>> class P: ... def initialize(self): ... self.dosomthing() ... def dosomthing(self): ... print "call from parent" ... class C(P): ... def dosomthing(self): ... print "call from child" >>> c = C() >>> c.initialize() call from child >>> class P_with_private: ... def initialize(self): ... self.__dosomthing() ... def __dosomthing(self): ... print "call from parent" ... class C2(P_with_private): ... def __dosomthing(self): ... print "call from child" >>> c2 = C2() >>> c2.initialize() call from parent >>> class P_with_hint: ... def initialize(self): ... self._dosomthing() ... def _dosomthing(self): ... print "call from parent" ... class C3(P_with_hint): ... def _dosomthing(self): ... print "call from child" >>> c3 = C3() >>> c3.initialize() call from child >>>
作者: panghuhu250 发布时间: 2011-09-18
python类的属性 只有 私有和共有两种
如果函数,方法或 属性的名字以两个下划线开始,表示私有类型,
没有使用两个下划线开头表示共有属性
类私有属性不能被类以外的函数调用
作者: CCDDR 发布时间: 2011-09-18
"
We don't use the term "private" here, since no attribute is really
private in Python (without a generally unnecessary amount of work).
"
双下划实即上、前面还有 __class_name,这就是 name mangling
Python code
class P: def __init__(self): self.__dosomthing() def __dosomthing(self): print "call from parent" class C(P): def __dosomthing(self): print "call from child" print P.__dict__ print print C.__dict__ # output #{'__module__': '__main__', '__doc__': None, '__init__': <function __init__ at 0x7fbac8541578>, '_P__dosomthing': <function __dosomthing at 0x7fbac8547410>} #{'_C__dosomthing': <function __dosomthing at 0x7fbac8547488>, '__module__': '__main__', '__doc__': None}
名字都转了,自然不知所谓,
python class 没有私有
作者: notax 发布时间: 2011-09-18
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28