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实现在线程里运行scrapy的方法
Apr 07 Python
Python2随机数列生成器简单实例
Sep 04 Python
python matplotlib 注释文本箭头简单代码示例
Jan 08 Python
pymongo中group by的操作方法教程
Mar 22 Python
pycharm new project变成灰色的解决方法
Jun 27 Python
Django实现分页显示效果
Oct 31 Python
Pytorch to(device)用法
Jan 08 Python
pytorch 中的重要模块化接口nn.Module的使用
Apr 02 Python
基于TensorFlow的CNN实现Mnist手写数字识别
Jun 17 Python
python 将列表里的字典元素合并为一个字典实例
Sep 01 Python
Python中Pyspider爬虫框架的基本使用详解
Jan 27 Python
python UIAutomator2使用超详细教程
Feb 19 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实现WEB动态网页静态
2006/10/09 PHP
如何过滤高亮显示非法字符
2006/10/09 PHP
PHP脚本数据库功能详解(中)
2006/10/09 PHP
解析thinkphp中的导入文件标签
2013/06/20 PHP
PHP实现批量修改文件后缀名的方法
2015/07/30 PHP
PHP实现文件上传与下载实例与总结
2016/03/13 PHP
解决Laravel无法使用COOKIE和SESSION的问题
2019/10/16 PHP
jquery弹出框的用法示例(2)
2013/08/26 Javascript
正负小数点后两位浮点数实现原理及代码
2013/09/06 Javascript
含有CKEditor的表单如何提交
2014/01/09 Javascript
怎么判断js脚本加载完成
2014/02/28 Javascript
javascript常见数据验证插件大全
2015/08/03 Javascript
js获取页面引用的css样式表中的属性值方法(推荐)
2016/08/19 Javascript
js 颜色选择插件
2017/01/23 Javascript
Vue.js父与子组件之间传参示例
2017/02/28 Javascript
基于vue开发微信小程序mpvue-docs跳转页面功能
2019/04/10 Javascript
Vue3配置axios跨域实现过程解析
2020/11/25 Vue.js
[51:29]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第一场 11.05
2020/11/05 DOTA
Python2.x版本中maketrans()方法的使用介绍
2015/05/19 Python
Django Rest framework之认证的实现代码
2018/12/17 Python
在python环境下运用kafka对数据进行实时传输的方法
2018/12/27 Python
python获取磁盘号下盘符步骤详解
2019/06/19 Python
Python模块相关知识点小结
2020/03/09 Python
python安装和pycharm环境搭建设置方法
2020/05/27 Python
python3:excel操作之读取数据并返回字典 + 写入的案例
2020/09/01 Python
Python如何截图保存的三种方法(小结)
2020/09/01 Python
德国原装品牌香水、化妆品和手表网站:BRASTY.DE
2016/10/16 全球购物
优秀班主任经验交流材料
2014/06/02 职场文书
会议通知
2015/04/15 职场文书
寻找最美乡村教师观后感
2015/06/18 职场文书
党纪处分决定书
2015/06/24 职场文书
员工聘用合同范本
2015/09/21 职场文书
2016年政治理论学习心得体会
2016/01/25 职场文书
导游词之无锡东林书院
2019/12/11 职场文书
《暗黑破坏神2:重制版》本周进行第一轮A测 目前可官网进行申请报名
2021/04/07 其他游戏
Rhit高效可视化Nginx日志查看工具
2021/11/01 Servers