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中的变量及其命名和打印
Mar 11 Python
python中实现将多个print输出合成一个数组
Apr 19 Python
python对日志进行处理的实例代码
Oct 06 Python
python 抓包保存为pcap文件并解析的实例
Jul 23 Python
Python应用实现双指数函数及拟合代码实例
Jun 19 Python
pycharm不以pytest方式运行,想要切换回普通模式运行的操作
Sep 01 Python
Python tempfile模块生成临时文件和临时目录
Sep 30 Python
Pycharm编辑器功能之代码折叠效果的实现代码
Oct 15 Python
python中_del_还原数据的方法
Dec 09 Python
Pandas对每个分组应用apply函数的实现
Dec 13 Python
教你怎么用Python监控愉客行车程
Apr 29 Python
python中redis包操作数据库的教程
Apr 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
造势之举?韩国总统候选人发布《星际争霸》地图
2017/04/22 星际争霸
php PDO中文乱码解决办法
2009/07/20 PHP
Yii的CDbCriteria查询条件用法实例
2014/12/04 PHP
php实现转换ubb代码的方法
2015/06/18 PHP
Textarea与懒惰渲染实现代码
2012/01/04 Javascript
js日期时间补零的小例子
2013/03/05 Javascript
jquery选择器大全 全面详解jquery选择器
2014/03/06 Javascript
javascript中2个感叹号的用法实例详解
2014/09/04 Javascript
Node.js 的异步 IO 性能探讨
2014/10/08 Javascript
jQuery源码解读之removeAttr()方法分析
2015/02/20 Javascript
JQuery实现动态添加删除评论的方法
2015/05/18 Javascript
jQuery中Chosen三级联动功能实例代码
2017/03/07 Javascript
Vue组件实例间的直接访问实现代码
2017/08/20 Javascript
详解如何让InstantClick兼容MathJax、百度统计等
2017/09/12 Javascript
Node.js成为Web应用开发最佳选择的原因
2018/02/05 Javascript
JsChart组件使用详解
2018/03/04 Javascript
JavaScript 正则命名分组【推荐】
2018/06/07 Javascript
Vue实现根据hash高亮选项卡
2019/05/27 Javascript
webpack4之如何编写loader的方法步骤
2019/06/06 Javascript
通过js给网页加上水印背景实例
2019/06/17 Javascript
Node.js利用Express实现用户注册登陆功能(推荐)
2020/10/26 Javascript
python之import机制详解
2014/07/03 Python
在Python程序中实现分布式进程的教程
2015/04/28 Python
基于OpenCV python3实现证件照换背景的方法
2019/03/22 Python
Django模板Templates使用方法详解
2019/07/19 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
2019/08/05 Python
复化梯形求积分实例——用Python进行数值计算
2019/11/20 Python
日语专业毕业生求职信
2013/12/04 职场文书
环保倡议书
2014/04/14 职场文书
美丽家庭事迹材料
2014/05/03 职场文书
2014年征兵标语
2014/06/20 职场文书
组工干部对照检查材料
2014/08/25 职场文书
慰问信范文
2015/02/14 职场文书
舌尖上的中国观后感
2015/06/02 职场文书
Redis三种集群模式详解
2021/10/05 Redis
微软发布Windows 11今年最大更新22H2(附 ISO 镜像官方下载)
2022/09/23 数码科技