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 相关文章推荐
python启动办公软件进程(word、excel、ppt、以及wps的et、wps、wpp)
Apr 09 Python
python urllib爬取百度云连接的实例代码
Jun 19 Python
django项目运行因中文而乱码报错的几种情况解决
Nov 07 Python
在python win系统下 打开TXT文件的实例
Apr 29 Python
Python实现获取本地及远程图片大小的方法示例
Jul 21 Python
Python----数据预处理代码实例
Mar 20 Python
python 搜索大文件的实例代码
Jul 08 Python
对Python中一维向量和一维向量转置相乘的方法详解
Aug 26 Python
如何利用python发送邮件
Sep 26 Python
python爬虫用scrapy获取影片的实例分析
Nov 23 Python
Python打包exe时各种异常处理方案总结
May 18 Python
撤回我也能看到!教你用Python制作微信防撤回脚本
Jun 11 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实现首页链接查询 友情链接检查的代码
2010/01/05 PHP
PHP类的静态(static)方法和静态(static)变量使用介绍
2012/02/19 PHP
php过滤html中的其他网站链接的方法(域名白名单功能)
2014/04/24 PHP
刷新PHP缓冲区为你的站点加速
2015/10/10 PHP
php curl常用的5个经典例子
2017/01/20 PHP
laravel数据库查询结果自动转数组修改实例
2021/02/27 PHP
Google Map Api和GOOGLE Search Api整合实现代码
2009/07/18 Javascript
javascript实现可改变滚动方向的无缝滚动实例
2013/06/17 Javascript
javascript实现仿IE顶部的可关闭警告条
2015/05/05 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之主动触发事件和模拟冒泡处理
2015/11/24 Javascript
JS实现的跨浏览器解析XML文件实例
2016/06/21 Javascript
node.js学习之base64编码解码
2016/10/21 Javascript
原生js实现addclass,removeclass,toggleclasss实例
2016/11/24 Javascript
在javaScript中检测数据类型的几种方式小结
2017/03/04 Javascript
node.JS md5加密中文与php结果不一致的解决方法
2017/05/05 Javascript
详解浏览器缓存和webpack缓存配置
2018/07/06 Javascript
微信小程序实现左侧滑动导航栏
2020/04/08 Javascript
闭包在python中的应用之translate和maketrans用法详解
2014/08/27 Python
python获取一组汉字拼音首字母的方法
2015/07/01 Python
Python金融数据可视化汇总
2017/11/17 Python
python 将md5转为16字节的方法
2018/05/29 Python
python如何爬取网站数据并进行数据可视化
2019/07/08 Python
python SocketServer源码深入解读
2019/09/17 Python
html2canvas生成清晰的图片实现打印的示例代码
2019/09/30 HTML / CSS
开业庆典答谢词
2014/01/18 职场文书
工商管理专业自荐信
2014/06/03 职场文书
个人批评与自我批评材料
2014/10/17 职场文书
2015年党风廉政建设工作总结
2015/04/09 职场文书
讲座通知范文
2015/04/23 职场文书
诗词赏析-(浣溪沙)
2019/08/13 职场文书
vue3中的组件间通信
2021/03/31 Vue.js
Nginx快速入门教程
2021/03/31 Servers
使用Navicat Premium工具将oracle数据库迁移到MySQL
2021/05/27 Oracle
理解python中装饰器的作用
2021/07/21 Python
html粘性页脚的具体使用
2022/01/18 HTML / CSS
python的html标准库
2022/04/29 Python