成员修饰符

两种成员

- 公有成员

- 私有成员, __字段名

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

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

class Info:
country = '中国' # 静态字段 __gender = '男' # 静态字段私有化
def __init__(self,name,age):
self.name = name
self.__age = age # age字段为私有的,外部无法直接访问
def show(self):
return self.__age,Info.__gender
def __get(self):
print('私有方法')
def gain(self):
r = self.__get()
return r obj = 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 = name
self.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 item obj = 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__ 方法

Python学习 :面向对象 -- 成员修饰符的更多相关文章

  1. Python面向对象(成员修饰符)

    day25 成员修饰符 class Foo: def __init__(self, name, age): self.name = name self.__age = age#私有,外部无法直接访问 ...

  2. Python:Day25 成员修饰符、特殊成员、反射、单例

    一.成员修饰符 共有成员 私有成员,__字段名,__方法 - 无法直接访问,只能间接访问 class Foo: def __init__(self,name,age): self.name = nam ...

  3. Python之 ---成员修饰符

    一:成员修饰符:分为共有成员和私有成员: 私有成员:__通过两个下滑线:无法直接访问,要访问只能间接访问: 如下我们定义了一个对象,里面有两个共有的成员变量,成员变量是共有的时候我们可以外部访问,如果 ...

  4. Python学习:17.Python面向对象(四、属性(特性),成员修饰符,类的特殊成员)

    一.属性(特性) 普通方法去执行的时候,后面需要加括号,特性方法执行的时候和静态字段一样不需要不需要加括号. 特性方法不和字段同名. 特性方法不能传参数. 在我们定义数据库字段类的时候,往往需要对其中 ...

  5. python学习day20 面向对象(二)类成员&成员修饰符

    1.成员 类成员 类变量 绑定方法 类方法 静态方法 属性 实例成员(对象) 实例变量 1.1实例变量 类实例化后的对象内部的变量 1.2类变量 类中的变量,写在类的下一级和方法同一级. 访问方法: ...

  6. Python面向对象之成员修饰符

    对于这些类成员有修饰符 之前定义字段country任何对象都可以访问,是公有的 可以定义为私用属性,只有类内部的方法可以调用,外部不能直接调用,但是可以间接调用 vim day7-10.py #!/u ...

  7. Python菜鸟之路:Python基础-类(2)——成员、成员修饰符、异常及其他

    三大成员 在Python的面向对象中,主要包括三大成员:字段.方法.属性 字段 类成员的字段又可分为普通字段.静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同,代码示例如下: ...

  8. python_way,day8 面向对象【多态、成员--字段 方法 属性、成员修饰符、特殊成员、异常处理、设计模式之单例模式、模块:isinstance、issubclass】

    python_way day8 一.面向对象三大特性: 多态 二.面向对象中的成员 字段.方法属性 三.成员修饰符 四.特殊成员 __init__.__doc__.__call__.__setitem ...

  9. Python_day8_面向对象(多态、成员修饰符、类中特殊方法、对象边缘知识)、异常处理之篇

    一.面向对象之多态 1.多态:简而言子就是多种形态或多种类型 python中不支持多态也用不到多态,多态的概念是应用与java/C#中指定传参的数据类型, java多态传参:必须是传参数的数据类型或传 ...

随机推荐

  1. awk 正则表达式、正则运算符详细介绍

    前言:使用awk作为文本处理工具,正则表达式是少不了的. 要掌握这个工具的正则表达式使用.其实,我们不必单独去学习它的正则表达式.正则表达式就像一门程序语言,有自己语法规则已经表示意思. 对于不同工具 ...

  2. Sql server字段排序,如果字段是字符型的数字

    SELECT id , rownum FROM test ))),) ASC 1.如果想要根据字符型的数字排序,不建议转换成数字类型在order by,因为数据存在字符时,可能转换失败. 2.使用RI ...

  3. Python实例---游戏人生[类的学习]

    # -*- coding:utf-8 -*- # ##################### 定义实现功能的类 ##################### class Person: def __in ...

  4. 沉淀再出发:ELK使用初探

    沉淀再出发:ELK使用初探 一.前言 ELK是Elasticsearch.Logstash.Kibana的简称,这三者是核心套件,但并非全部. 最近ElasticSearch可以说是非常火的一款开源软 ...

  5. PHP_GET后门,躲避任何安全软件

    经常拿到一些比较好的php站想要留住.插入菜刀一句话,很容易被管理发现,不管是eval还是assert,就是管理发现不了,有时连接也会被各种的安全软件拦截.现在教大家一个简单的技巧.本人一直在用,留的 ...

  6. JavaScript的DOM_StyleSheet操作内联或链接样式表

    使用 style 属性,仅仅只能获取和设置行内的样式,如果是通过内联<style>或链接<link>提供的样式规则就无可奈何了,使用 getComputedStyle 和cur ...

  7. 【1】【MOOC】Python游戏开发入门-北京理工大学【第二部分-游戏开发之框架】

    学习地址链接:http://www.icourse163.org/course/0809BIT021E-1001873001?utm_campaign=share&utm_medium=and ...

  8. BZOJ 1059 矩阵游戏 二分图匹配

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1059 题目大意: 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏 ...

  9. flume MemoryChannel 源代码解析

    1.先分析三个LinkedBlockingDeque<Event>类型的takeList,putList,queue putList:  存放的是来自source生产的数据,通过调用doP ...

  10. 2018-2019-2 网络对抗技术 20165322 Exp6 信息搜集与漏洞扫描

    2018-2019-2 网络对抗技术 20165322 Exp6 信息搜集与漏洞扫描 目录 实验原理 实验内容与步骤 各种搜索技巧的应用 DNS IP注册信息的查询 基本的扫描技术 漏洞扫描 基础问题 ...