首页 > 试题广场 >

对于Python类中单下划线_foo、双下划线__foo与_

[不定项选择题]
对于Python类中单下划线_foo、双下划线__foo与__foo__的成员,下列说法正确的是?
  • _foo 不能直接用于’from module import *’
  • __foo解析器用_classname__foo来代替这个名字,以区别和其他类相同的命名
  • __foo__代表python里特殊方法专用的标识
  • __foo 可以直接用于’from module import *’
python中主要存在四种命名方式:
1、object #公用方法
2、_object #半保护
                 #被看作是“protect”,意思是只有类对象和子类对象自己能访问到这些变量,
                  在模块或类外不可以使用,不能用’from module import *’导入。
                #__object 是为了避免与子类的方法名称冲突, 对于该标识符描述的方法,父
                  类的方法不能轻易地被子类的方法覆盖,他们的名字实际上是
                  _classname__methodname。
3、_ _ object  #全私有,全保护
                       #私有成员“private”,意思是只有类对象自己能访问,连子类对象也不能访
                          问到这个数据,不能用’from module import *’导入
4、_ _ object_ _     #内建方法,用户不要这样定义

编辑于 2018-03-19 13:41:32 回复(4)

_xxx 不能用’from module import *’导入 (相当于protected)
__xxx__ 系统定义名字 (系统内置的,比如关键字)
__xxx 类中的私有变量名 (privated),所以更加不能使用from module import进行导入了
发表于 2018-03-05 13:55:16 回复(4)
比较复杂的是这个双前导下划线__foo
!!双下划线前缀会导致Python解释器重写属性名称,以避免子类中的命名冲突。这叫作名称修饰(name mangling)
假如类名是Test,那么__foo在对象属性列表中会变为_Test__foo,解释器这么做的目的,是防止变量在子类中被重写。
例如Test的子类为ExtendedTest,那么父类的__foo是无法被修改的

发表于 2018-09-12 20:30:08 回复(0)
python中使用下划线命名的规则:
(1)example:前后无下划线表示该变量、函数、成员或方法公有,可以以任何形式访问。
(2)_example:前置单下划线表示该内容受保护。如果是变量或者函数,在from some_module import *这种情况下,不会被导入。如果是成员或者方法,仅允许类内部使用及该类的子类继承。
(3)__example:前置双下划线表示该变量、函数、成员或方法私有,无法以任何方式被外部直接使用。类的私有成员及方法无法被子类继承,但对于本类来说,仍可以用a_instance._ClassName__MethodName()来调用。
(4)__example__:前后双下划线的命名方式用于python里的特殊方法。
(5)example_:后置单下划线,用于避免和Python关键词冲突,无特殊含义,例如:int_。
发表于 2019-07-27 16:29:30 回复(1)
python中主要存在四种命名方式:
1、object    公用方法
2、_object   半保护
                 被看作是“protect”,意思是只有类对象和子类对象自己能访问到这些变量, 在模块或类外不可以使用,不能用’from module import *’导入。
                #__object 是为了避免与子类的方法名称冲突, 对于该标识符描述的方法,父类的方法不能轻易地被子类的方法覆盖,他们的名字实际上是  _classname__methodname。
3、_ _ object    全私有,全保护   私有成员“private”,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据,不能用’from module import *’导入
4、_ _ object_ _     #内建方法,用户不要这样定义

发表于 2018-11-30 14:41:42 回复(1)
python中主要存在四种命名方式:
1、object #公用方法
2、_object #半保护
                 #被看作是“protect”,意思是只有类对象和子类对象自己能访问到这些变量,
                  在模块或类外不可以使用,不能用’from module import *’导入。
                #__object 是为了避免与子类的方法名称冲突, 对于该标识符描述的方法,父
                  类的方法不能轻易地被子类的方法覆盖,他们的名字实际上是
                  _classname__methodname。
3、_ _ object  #全私有,全保护
                       #私有成员“private”,意思是只有类对象自己能访问,连子类对象也不能访
                          问到这个数据,不能用’from module import *’导入。
4、_ _ object_ _     #内建方法,用户不要这样定义
发表于 2021-05-30 15:35:40 回复(0)
BC 正确答案ABC _obj不能被from mudule import *导入,但可以import module然后用module._obj调用 __obj会被python解释器替换成__classname__obj,所以不能直接用__obj,事实上也不推荐用在外部进行调用; __obj__为系统方法或变量,不推荐定义这种方法或变量
编辑于 2018-08-23 07:20:23 回复(0)
单_不能被调用,在其他类中调用该类,会首先执行_方法
发表于 2018-03-04 00:41:47 回复(0)
__methodname 是为了避免与子类的方法名称冲突, 对于该标识符描述的方法,父类的方法不能轻易地被子类的方法覆盖,他们的名字实际上是_classname__methodname。
编辑于 2018-03-18 18:57:58 回复(0)
1.python中的标识符是区分大小写的。
2.标示符以字母或下划线开头,可包括字母,下划线和数字。
3.以下划线开头的标识符是有特殊意义的。
> 以单下划线开头(_foo)的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用“from xxx import *”而导入;
> 以双下划线开头的(__foo)代表类的私有成员;
> 以双下划线开头和结尾的(__foo__)代表python里特殊方法专用的标识,如__init__()代表类的构造函数。

发表于 2021-01-07 10:46:52 回复(0)
_protect __private
发表于 2019-12-17 09:15:39 回复(0)
_foo:半保护,可为类对象本身和子类对象调用,不允许improt导入使用; __foo:全保护,只为类对象本身使用 __foo__:系统命名
编辑于 2024-03-25 12:38:37 回复(0)
记录
发表于 2022-11-22 21:05:45 回复(0)
_a半保护,在类里面,或者继承类使用 __a全保护,只能在本类里面使用,前面的都不能被import导入所使用
编辑于 2021-03-08 18:40:16 回复(0)
<p>B 不是区别和其他类中的函数名 是用于防止子类重写</p>
发表于 2020-04-21 20:18:44 回复(0)
-方法为半保护
发表于 2019-12-28 21:19:35 回复(0)
python中四种命名方式
一:公用方法,可以使用已有的许多方式调用
二:半私有方法,只可以通过类和类的子类调用,模块外不能调用也不能导入
三:私有方法:只有通过类来调用
四:内建方法,系统占据的一种命名方式
发表于 2019-06-19 16:03:21 回复(0)
_相当于protect __相当于private 无_相当于public 两边各两个_是内部的,使用时想想 __main__ 这个就知道是内部的
发表于 2019-03-14 14:21:31 回复(0)
为什么我尝试了单下划线和双下划线的变量可以导入 难道我的打开方式不对?
发表于 2018-12-28 19:51:23 回复(0)
ABC
发表于 2018-09-15 17:07:53 回复(0)