采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师,课程里设置self._X_train,成员变量名前加一个下划线,外面还是可以直接调用,私有成员变量名前应该加两条下划线,外部才不能直接调用。
严格来说Python没有真正的私有成员变量。__variable的形式也可以通过_ClassName__variable的形式被外界调用。__variable比_variable多做了name mangling。
很多文章都会称_variable为“私有”。这个称呼不够严谨。Python官方称为internal use,并且特别强调,Python是没有“私有”概念的。或者说,_variable和__variable都可以叫“私有”。事实上,Python官方对这二者的区别强调是name mangling,而不是“私有”和“非私有”。这一点,可以参见Python官方PEP 8: https://www.python.org/dev/peps/pep-0008/#descriptive-naming-styles
习惯上,如果没有特殊的理由,应该使用_variable作为其他OO语言中的“私有”的概念,在Python语言中更多的是一个提示:这是一个不应该被外界触碰的变量。为什么没有特殊情况不应该使用__variable?这是一篇很好的文章说明这一点:http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html#naming 其中还指向了两个stackoverflow的链接,里面都有很好的讨论。
在这个课程中,我没有特别纠结这个称呼,毕竟不是Python课程。按照习俗,我称_variable为“私有”。随便找一个称_variable为私有的例子:https://hackernoon.com/understanding-the-underscore-of-python-309d1a029edc
最后,这个课程实现的算法代码风格和scikit-learn保持一致,可以参见scikit-learn的代码,其中对于“私有”变量(既不需要被外界调用的变量),统一使用_variable。随便给一个例子:https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/neighbors/base.py 可以搜索看一下其中诸如:_fit_X,_tree等“私有”变量;_fit等“私有”方法。可以再搜索一下__,除了魔法方法,不会有自定义的__variable或者__method:)
非常感谢!
明白了,用双下划线子类没法直接使用
登录后可查看更多问答,登录/注册
Python3+sklearn,兼顾原理、算法底层实现和框架使用。
2.6k 19
3.5k 17
3.0k 15
1.7k 15
1.5k 14