成员修饰符

两种成员

- 公有成员

- 私有成员, __字段名

 - 无法直接访问,只能通过内部方法来间接访问私有成员

简例:公有成员与私有成员 

class Info:country = '中国'  # 静态字段    __gender = '男'   # 静态字段私有化def __init__(self,name,age):self.name = nameself.__age = age  # age字段为私有的,外部无法直接访问def show(self):return self.__age,Info.__genderdef __get(self):print('私有方法')def gain(self):r = self.__get()return robj = Info('alex',19)
print(obj.name)
# print(obj.__age)  # 此时会报错,无法访问
res = obj.show()    # 方法在类中,故能通过方法在内部访问私有字段
print(res)
# obj.__get()       # 此时也会报错,无法访问
obj.gain()          # 通过内部方法来访问
>>>>>>>>>
alex
(19, '男')
私有方法

特殊成员

- __init__ 类()自动执行

- __call__ 对象() 类()() 自动执行

- __int__ int() 执行

- __str__ str() 执行

- __dict__ 对象.__dict__ 执行,将对象中封装的所有内容以字典的形式返回

简例:__call__方法

class Info:def __init__(self):print('init')def __call__(self, *args, **kwargs):        # 对象() 自动执行print('call')obj = Info()
obj()       # 只执行__call__方法
Info()()    # 相当于 obj()()
>>>>>>>>>
init
call
init
call

简例:__int__方法 __str__方法 __dict__方法 __getitem__方法

class Info:def __init__(self,name,age):self.name = nameself.age  = age# int 对象,自动执行__int__方法,并将返回值赋值给int对象def __int__(self):return 0# str 对象,自动执行__str__方法,并将返回值赋值给str对象def __str__(self):return '%s - %s' %(self.name,self.age)def __getitem__(self, item):return itemobj = Info('alex',20)
print(obj)              # 实际上 print()执行print(str(obj))
d = obj.__dict__
print(d)
res = Info.__dict__     # 查看类中的内容
print(res)
li = Info('mike',22)
res = li['APPLE']             # 自动执行 li 对象的类中的 __getitem__方法,’APPLE‘作为参数传递给item
print(res)
>>>>>>>>>
alex - 20
{'name': 'alex', 'age': 20}
{'__int__': , '__getitem__': , '__str__': , '__dict__': <attribute '__dict__' of 'Info' objects>, '__init__': , '__doc__': None, '__weakref__': <attribute '__weakref__' of 'Info' objects>, '__module__': '__main__'}
APPLE

metaclass , 类的本源 type

python中一切的事物都是对象,在调用类的时候都会经过 type类,python中默认 metaclass = type

简例:创建一个Mytype类来继承type类中的方法,在Mytype类中可以自定义自己需要的方法,而不必要一定执行type类中的方法

class Mytype(type):def __init__(self,*args,**kwargs):# self = Info类super(type, self).__init__()def __call__(self,*args,**kwargs):# self = Info类obj = self.__new__(self,*args,**kwargs)# 此时 r 为 Info类中的 __new__方法中返回的对象self.__init__(obj)class Info(object,metaclass=Mytype):def __init__(self):print('hello world')    # obj = Info() 其实就是调用了类中的 __new__方法来创建obj对象def __new__(cls,*args,**kwargs):return object.__new__(cls,*args,**kwargs)# 此时创建了对象def func(self):print('hi world')obj = Info()
>>>>>>>>>
hello world

值得注意的是obj 是对象,属于Info类

Info类也是对象 ,只不过是type类中的对象,type其实也是一个类

实际上类在执行阶段的执行顺序是: 对象 = 类() -- type类中的__call__方法 -- 类()中的__new__方法 -- 类中的 __init__方法 ;而并非之前所说的简单地调用了 __init__ 方法

转载于:https://www.cnblogs.com/ArticleYeung/p/10500105.html

Python学习 :面向对象 -- 成员修饰符相关推荐

  1. 笔记整理3----Java语言高级(三)11 综合练习+12 面向对象-static变量 与 代码块+13 面向对象-继承与抽象类+14 面向对象-接口与多态+15 面向对象-包修饰符

    11 综合练习+12 面向对象-static变量 与 代码块+13 面向对象-继承与抽象类+14 面向对象-接口与多态+15 面向对象-包&修饰符 第11天 综合练习 今日内容介绍 综合练习 ...

  2. Python学习 - 面向对象之多态

    Python学习 - 语法入门:https://blog.csdn.net/wanzijy/article/details/125287855 Python学习 - 数据类型:https://blog ...

  3. 14.11类的成员修饰符

    成员修饰符 类的所有成员分为:字段,方法 公有成员,在任何地方都能访问 私有成员,只有在类的内部才能访问 私有成员和公有成员的定义不同:私有成员命名时,前两个字符是下划线.(特殊成员除外,例如:ini ...

  4. C#基础--类/接口/成员修饰符,多态、重载、重写,静态和非静态

    C#基础--类/接口/成员修饰符,多态.重载.重写,静态和非静态 类/接口/成员修饰符 C#修饰符---接口: 接口默认访问符是internal 接口的成员默认访问修饰符是public C#修饰符-- ...

  5. C#的类修饰符和成员修饰符

    一.类修饰符 类修饰符:public.internal. partial.abstract.sealed.static.new.protected.private.protected internal ...

  6. Java学习系列(四)Java面向对象之修饰符、封装、继承、多态详解

    今天内容比较多,直接步入正题吧. 类和对象的定义 类是现实世界或思维世界中的实体在计算机中的反映,它将数据以及这些数据上的操作封装在一起.而对象是具有类类型的变量,存在于堆内存中.类是对象的抽象,而对 ...

  7. java函数修饰符_Java 函数 面向对象,修饰符,类,构造方法,this

    1.函数 函数就是定义在类中,具有特定功能的一段小程序. 在面向对象编程的语言中,函数也叫方法. 2.函数的格式 修饰符 返回值类型 函数名(参数类型 实际参数,....) { 执行语句; retur ...

  8. JAVA知识学习——类的修饰符

    Java程序在定义类时,除了使用class关键字标识之外,还可以在class之前增加若干类的修饰符来修饰限定所定义的类的特性.类的修饰符分为访问控制符和非访问控制符两大类.修饰符之间的先后排列次序对类 ...

  9. python学习------面向对象的程序设计

    一 面向对象的程序设计的由来 1940年以前:面向机器最早的程序设计都是采用机器语言来编写的,直接使用二进制码来表示机器能够识别和执行的指令和数 据.简单来说,就是直接编写 0 和 1 的序列来代表程 ...

最新文章

  1. 使用pdf.js预览实现读取服务器外部文件
  2. 基于MATLAB的LDPC编译码仿真,调制为64QAM
  3. Windows上Mqtt服务器搭建与使用客户端工具MqttBox进行测试
  4. VTK:Utilities之VectorArrayKnownLength
  5. scratch跳一跳游戏脚本_cocos creator制作微信小游戏「跳一跳」
  6. Benchmark与Profiler---性能调优得力助手
  7. 常用无线通信协议Zigbee、bluetooth、wifi比较
  8. ArcGIS单波段影像重分类与批处理
  9. 计算机网络——应用层
  10. mysql查询男女平均年龄_mysql查询练习(三)
  11. Unity3D基础知识学习笔记
  12. windows服务器双网卡链路聚合_[分享]Windows 8 及以上版本 开启多网卡链路聚合 | 霸王硬上弓's Blog...
  13. Markdown | 最具有效率的写作工具一次性掌握
  14. linux中的setenv命令
  15. UE4 | 学习Shader - “赏月、玩灯笼”
  16. 百度paddlepaddle《青春有你2》技术打卡五天学习总结与创意赛参加
  17. 头文件和源文件的连接
  18. openjudge 丛林中的路
  19. Java8集合的一些操作
  20. opencv学习---计算图像的水平积分投影和垂直积分投影

热门文章

  1. MSP430F5529 DriverLib 库函数学习笔记(一)时钟配置和闪烁LED
  2. 按键 使用WinHttp实现POST方式用户模拟登录网站
  3. Linux下静态IP地址的设置及TFTP服务的搭建
  4. React开发(183):ant design 中treeSelect控制选中
  5. 重学java基础第十四课:java特性和优势
  6. 前端学习(3244):react的生命周期新
  7. [html] DOM和BOM有什么区别?
  8. [vue] vue组件里的定时器要怎么销毁?
  9. 前端学习(2515):父向子传值
  10. “约见”面试官系列之常见面试题之第八十二篇之MVC(建议收藏)