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使用rsa加密算法模块模拟新浪微博登录
Jan 22 Python
Python中itertools模块用法详解
Sep 25 Python
Python使用reportlab将目录下所有的文本文件打印成pdf的方法
May 20 Python
python监控键盘输入实例代码
Feb 09 Python
python 获取键盘输入,同时有超时的功能示例
Nov 13 Python
python requests post多层字典的方法
Dec 27 Python
softmax及python实现过程解析
Sep 30 Python
Python Tornado批量上传图片并显示功能
Mar 26 Python
如何将tensorflow训练好的模型移植到Android (MNIST手写数字识别)
Apr 22 Python
python爬虫实现POST request payload形式的请求
Apr 30 Python
Python 基于jwt实现认证机制流程解析
Jun 22 Python
pdf论文中python画的图Type 3 fonts字体不兼容的解决方案
Apr 24 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
用PHP4访问Oracle815
2006/10/09 PHP
教你如何把一篇文章按要求分段
2006/10/09 PHP
php实现留言板功能(代码详解)
2017/03/28 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
jQuery 类twitter的文本字数限制带提示效果插件
2010/04/16 Javascript
jquery DOM操作 基于命令改变页面
2010/05/06 Javascript
nodejs中exports与module.exports的区别详细介绍
2013/01/14 NodeJs
浅析IE10兼容性问题(frameset的cols属性)
2014/01/03 Javascript
键盘上一张下一张兼容IE/google/firefox等浏览器
2014/01/28 Javascript
Javascript 学习笔记之 对象篇(二) : 原型对象
2014/06/24 Javascript
JavaScript Math.ceil 方法(对数值向上取整)
2015/01/09 Javascript
JS+CSS实现实用的单击输入框弹出选择框的方法
2015/02/28 Javascript
浅谈javascript构造函数与实例化对象
2015/06/22 Javascript
使用CoffeeScrip优美方式编写javascript代码
2015/10/28 Javascript
JavaScript中的函数(二)
2015/12/23 Javascript
省市区三级联动jquery实现代码
2020/04/15 Javascript
vuejs指令详解
2017/02/07 Javascript
ES6新特性之字符串的扩展实例分析
2017/04/01 Javascript
mui上拉加载功能实例详解
2017/04/13 Javascript
浅析为什么a=&quot;abc&quot; 不等于 a=new String(&quot;abc&quot;)
2017/10/25 Javascript
详解Chai.js断言库API中文文档
2018/01/31 Javascript
vue中echarts3.0自适应的方法
2018/02/26 Javascript
javascript实现前端成语点击验证优化
2020/06/24 Javascript
Python while 循环使用的简单实例
2016/06/08 Python
python装饰器初探(推荐)
2016/07/21 Python
Python3下错误AttributeError: ‘dict’ object has no attribute’iteritems‘的分析与解决
2017/07/06 Python
Python包,__init__.py功能与用法分析
2020/01/07 Python
keras .h5转移动端的.tflite文件实现方式
2020/05/25 Python
tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this T
2020/06/22 Python
受外贸欢迎的美国主机:BlueHost
2017/05/16 全球购物
6PM官网:折扣鞋、服装及配饰
2018/08/03 全球购物
Kickers鞋英国官网:男士、女士和儿童鞋
2021/03/08 全球购物
毕业生自我推荐
2013/11/04 职场文书
优秀员工获奖感言
2014/03/01 职场文书
详解Go与PHP的语法对比
2021/05/29 PHP
Python捕获、播放和保存摄像头视频并提高视频清晰度和对比度
2022/04/14 Python