Python 类的特殊成员解析


Posted in Python onJune 20, 2018

类的成员有两种形式

公有成员,在任何地方都能访问

私有成员,只有在类的内部才能方法,私有成员命名时,前两个字符是下划线。

class Foo:
  def __init__(self, name, age):
    self.name = name
    self.__age = age

  def show(self):      # 间接方法私有字段
    return self.__age
  

obj = Foo('klvchen', 25)
print(obj.name)
res = obj.show()
print(res)

运行结果:

klvchen
25

公有静态字段:类可以访问;类内部可以访问;派生类中可以访问

私有静态字段:仅类内部可以访问;

class Foo:
  __v = '666'     # 私有静态字段
  def __init__(self):
    pass
  def show(self):
    return Foo.__v
obj = Foo()
res = obj.show()
print(res)

运行结果:

666

class Foo:
  __v = '666'
  def __init__(self):
    pass
  def show(self):
    return Foo.__v
  @staticmethod
  def stat():
    return Foo.__v
res = Foo.stat()
print(res)

运行结果:

666

无法从父类继承私有字段

class F:
  def __init__(self):
    self.ge = 123
    self.__gene = 456   #私有字段
class S(F):
  def __init__(self, name):
    self.name = name
    self.__age = 18
    super(S, self).__init__()
  def show(self):
    print(self.name)
    print(self.__age)
    print(self.ge)
    print(self.__gene)
s = S('klvchen')
s.show()

运行结果:

klvchen
18
123
AttributeError: 'S' object has no attribute '_S__gene'

类的特殊成员

int(对象),会自动执行对象中的__int__方法,并将返回赋值给 int 对象,同理 str(对象),会自动执行__str__方法,并返回赋值给 str 对象。

class Foo:
  def __init__(self):
    pass
  def __int__(self):
    return 666
  def __str__(self):
    return 'hello world'
obj = Foo()
print(obj, type(obj))
res = int(obj)
print(res)
res1 = str(obj)
print(res1)

运行结果:

<__main__.Foo object at 0x0000022BBE9DA978> <class '__main__.Foo'>
666
hello world

print(对象),str(对象),都会自动执行对象中的__str__方法,并返回

class Foo:
  def __init__(self, n, a):
    self.name = n
    self.age = a

  def __str__(self):
    return '%s-%d' %(self.name, self.age)

obj = Foo('klvchen', 28)
print(obj)

运行结果:

klvchen-28

两个对象相加时,自动执行第一对象的__add__方法,并且将第二个对象当参数传递进去

class Foo:
  def __init__(self, name, age):
    self.name = name
    self.age = age
  def __add__(self, other):
    return self.age + other.age
obj1 = Foo('klv1', 23)
obj2 = Foo('klv2', 24)
res = obj1 + obj2
print(res, type(res))

运行结果:

47 <class 'int'>
class Foo:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def __add__(self, other):
        return Foo(obj1.name, obj2.age)
    def __del__(self):
        print('析构方法')
obj1 = Foo('klv1', 23)
obj2 = Foo('klv2', 24)
res = obj1 + obj2
print(res, type(res))

运行结果:

<__main__.Foo object at 0x0000016DFCE125C0> <class '__main__.Foo'>
析构方法
析构方法
析构方法

li[对象] 会自动执行 li 对象的类中的__getitem__方法,8当作参数传递给item

class Foo:
  def __init__(self, name, age):
    self.name = name
    self.age = age
  def __getitem__(self, item):
    return item
li = Foo('klvchen', 28)
r = li[8]
print(r)

运行结果:

8

类中的__setitem__,__delitem__方法

class Foo:
  def __init__(self, name, age):
    self.name = name
    self.age = age
  def __getitem__(self, item):
    return item
  def __setitem__(self, key, value):
    print(key, value)
  def __delitem__(self, key):
    print(key)
li = Foo('klvchen', 28)
r = li[8]
print(r)
li[100] = 'hello'
del li[999]

运行结果:

8
100 hello
999

执行类中的__iter__()方法,并获取其返回值,循环上一步中返回对象,用于迭代器,之所以列表、字典、元组可以进行for循环,是因为类型内部定义了iter

class Foo:
  def __init__(self, name, age):
    self.name = name
    self.age = age
  def __iter__(self):
    return iter([11, 22, 33])
li = Foo('klvchen', 26)
for i in li:
  print(i)

运行结果:

11
22
33

for 循环的内部操作

obj = iter([11, 22, 33])
while True:
  val = obj.next()
  print val

总结

以上所述是小编给大家介绍的Python 类的特殊成员解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
在Windows系统上搭建Nginx+Python+MySQL环境的教程
Dec 25 Python
基于python时间处理方法(详解)
Aug 14 Python
python openpyxl使用方法详解
Jul 18 Python
Python学习笔记之For循环用法详解
Aug 14 Python
Python 异常处理Ⅳ过程图解
Oct 18 Python
python+tifffile之tiff文件读写方式
Jan 13 Python
python numpy--数组的组合和分割实例
Feb 24 Python
tensorflow 2.0模式下训练的模型转成 tf1.x 版本的pb模型实例
Jun 22 Python
Python生成器generator原理及用法解析
Jul 20 Python
Python Merge函数原理及用法解析
Sep 16 Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
Feb 04 Python
Python中else的三种使用场景
Jun 16 Python
python实现音乐下载的统计
Jun 20 #Python
django2用iframe标签完成网页内嵌播放b站视频功能
Jun 20 #Python
python基于http下载视频或音频
Jun 20 #Python
python实现下载pop3邮件保存到本地
Jun 19 #Python
python+POP3实现批量下载邮件附件
Jun 19 #Python
python实现批量解析邮件并下载附件
Jun 19 #Python
Python3使用SMTP发送带附件邮件
Jun 16 #Python
You might like
php按百分比生成缩略图的代码分享
2014/05/10 PHP
PHP实现linux命令tail -f
2016/02/22 PHP
使javascript也能包含文件
2006/10/26 Javascript
非常有用的40款jQuery 插件推荐(系列二)
2011/12/25 Javascript
jquery表格内容筛选实现思路及代码
2013/04/16 Javascript
jQuery+PHP实现动态数字展示特效
2015/03/14 Javascript
基于JavaScript实现手机短信按钮倒计时(超简单)
2015/12/30 Javascript
BootStrap Datetimepicker 汉化的实现代码
2017/02/10 Javascript
bootstrap如何让dropdown menu按钮式下拉框长度一致
2017/04/10 Javascript
JavaScript设计模式之策略模式详解
2017/06/09 Javascript
基于vue实现一个神奇的动态按钮效果
2019/05/15 Javascript
关于layui表单中按钮自动提交的解决方法
2019/09/09 Javascript
VUE动态生成word的实现
2020/07/26 Javascript
vue和H5 draggable实现拖拽并替换效果
2020/07/29 Javascript
Python生成不重复随机值的方法
2015/05/11 Python
Python序列化基础知识(json/pickle)
2017/10/19 Python
python使用SMTP发送qq或sina邮件
2017/10/21 Python
浅谈使用Python内置函数getattr实现分发模式
2018/01/22 Python
Python反射和内置方法重写操作详解
2018/08/27 Python
Python操作远程服务器 paramiko模块详细介绍
2019/08/07 Python
Python利用Pillow(PIL)库实现验证码图片的全过程
2020/10/04 Python
Html5游戏开发之乒乓Ping Pong游戏示例(二)
2013/01/21 HTML / CSS
Lookfantastic西班牙官网:英国知名美妆购物网站
2018/06/13 全球购物
中国茶叶、茶具一站式网上购物商城:醉品茶城
2018/07/03 全球购物
美国LOGO设计公司:The Logo Company
2018/07/16 全球购物
Nike德国官网:Nike.com (DE)
2018/11/13 全球购物
Hotels.com英国:全球领先的酒店住宿提供商
2019/01/24 全球购物
捷克移动配件网上商店:ProMobily.cz
2019/03/15 全球购物
Dr. Martens马汀博士德国官网:马丁靴鼻祖
2019/12/26 全球购物
几个SQL的面试题
2014/03/08 面试题
建筑施工实习自我鉴定
2013/09/19 职场文书
项目经理助理岗位职责
2015/04/13 职场文书
《比的意义》教学反思
2016/02/18 职场文书
如何利用Python实现一个论文降重工具
2021/07/09 Python
Python 处理表格进行成绩排序的操作代码
2021/07/26 Python
室外天线与收音机天线杆接合方法
2022/04/05 无线电