《流畅的python》学习笔记 - python数据模型

  python数据模型,就是对python语言框架的描述,规范了这门语言自身构建模块的接口。
  每次都要提醒自己,python是面向对象的,要用面向对象的方法来思考问题。

私有和被保护的属性

  • 类的私有属性:两个下划线开头(简称dunder),声明该属性为私有,不能在对象(类)外部或直接使用,例如:__private_attrs;
  • 类的方法:在类的内部,使用关键字def定义类的方法,与一般函数定义不同,类的方法必须包含参数self,且为第一个参数;
  • 类的私有方法:以两个下划线开头,与类的私有属性类似,例如:__private_methods()。
  • 魔术方法:以双下划线开头并以双下划线结束的特殊方法,例如__getitem__(),这些特殊方法能让你自己的对象实现和支持以下的语言架构,并与之交互(在《流畅的python》书中,作者将这种方法称作“魔术方法(megic method)”或 “dunder method”):
    • 迭代
    • 集合类
    • 属性访问
    • 运算符重载
    • 函数的方法的调用
    • 对象的创建和销毁
    • 字符串表示形式和格式化
    • 管理上下文

  默认情况下,类的属性和方法都是公开的,python中没有类似public或private等关键字来修饰类的方法和属性。

  在内部,python使用一种“name mangling”技术,将__membername替换成_class__membername,因此,用户在外部访问__membername就会被提示找不到相应的变量。

   python的私有变量和方法仍然是可以访问的,方法如下:

  • 实例._类名__变量名
  • 实例._类名__变量名

  也就是说,python没有“真正”的私有机制,而是通过下划线实现“伪私有”,所以python中腰避免定义下划线开头的变量和方法。

变量名格式 含义
_xxx 单下划线开头的变量叫做“保护变量”,只有类的实例和子类实例能访问
__xxx 双下划线开头的变量,即私有成员,只有类对象自己能访问,子类对象也不能访问
xxx 系统定义成员,python的专用标识,例如__init__()

猜你喜欢

转载自blog.csdn.net/steventian72/article/details/85602262