_xxx:全局属性、全局方法不可被外部模块访问
1._xxx命名的全局属性、全局方法为module中的私有属性、私有方法,意味着该全局属性、全局方法在当前模块可以调用,但不应该在外部模块直接调用:
当使用 from module import * 时,该module中_xxx命名的属性、方法不能被导入。
有种方式可以在外部调用但是不建议:
import module
module._xxx
module._xxx()
2._xxx命名的类内属性、类内方法。与普通的类内属性,类内方法一样。
class father():
_E = 00000
def __init__(self,_name):
self._name='Lily'
def _eat(self):
print("吃饭呢")
class son(father):
pass
f=father('Hoily')
f._eat()#输出:吃饭呢
s=son('Mike')
s._eat()#输出:吃饭呢
_ _xxx:全局属性、全局方法不可被外部模块访问;类内属性,类内方法不可被子类访问
1._ _xxx命名的全局属性、全局方法为module中的私有属性、私有方法,意味着该全局属性、全局方法在当前模块可以调用,但不应该在外部模块直接调用:当使用 from module import * 时,该module中_xxx命名的属性、方法不能被导入。
有种方式可以在外部调用但是不建议:
import module
module._ _xxx
module._ _xxx()
2._ _xxx命名的类内属性、类内方法。这种命名方式更多在于类的继承,通过_ _xxx命名类内的属性、方法,可以防止被子类重写。如果通过实例化类去调用_ _xxx命名类内的属性、方法,必须通过实例._类名_ _xxx。
除了不能继承给子类和特殊的调用规则以外,其他的与普通的类内属性,类内方法一样。
class father():
__E = 00000
def __init__(self,__name):
self.__name='Lily'
def __eat(self):
print("吃饭呢")
class son(father):
pass
f=father('Hoily')
f._father__eat() #输出:吃饭呢
s=son('Mike')
s._son_ _eat()#报错:'son' object has no attribute '_son_ _eat'
xxx_:使用关键字命名的属性、方法
如果定义的属性或者方法的名称与Python中的关键字(例如 def、class、return)冲突,可以将该属性或者方法名称后面加上一个下划线就可以使用了,就如def_、class_、return_。
_ _xxx_ _:系统定义的方法(魔法方法)
罗列一些比较常见的,有记忆就可:
obj为一个对象
obj=MyClass()
实际上调用:x._ _init_ _()
obj为一个对象
result=obj()
实际上调用:obj.__call__()
x==y
实际上调用:x._ _eq_ _(y)
len(seq)
实际上调用:seq._ _len_ _()
x._ _sizeof_ _()
含义:x在内存中的字节数, x为class得话, 就应该是x._ _basicsize_ _()
x为一个列表
x[y]
实际上调用:x._ _getitem_ _(y)
obj为一个对象
obj=MyClass()
obj._ _ dir()_ _
含义:查看一个变量的所有方法和变量