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 07 Python
Python Web框架Flask中使用百度云存储BCS实例
Feb 08 Python
详解Python函数作用域的LEGB顺序
May 14 Python
python中闭包Closure函数作为返回值的方法示例
Dec 17 Python
Python2.7+pytesser实现简单验证码的识别方法
Dec 29 Python
Python高级编程之继承问题详解(super与mro)
Nov 19 Python
Python turtle库绘制菱形的3种方式小结
Nov 23 Python
使用Python爬虫库BeautifulSoup遍历文档树并对标签进行操作详解
Jan 25 Python
浅析python 动态库m.so.1.0错误问题
May 09 Python
matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解
Jan 05 Python
pandas map(),apply(),applymap()区别解析
Feb 24 Python
浅谈Python xlwings 读取Excel文件的正确姿势
Feb 26 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
ThinkPHP空模块和空操作详解
2014/06/30 PHP
php计算两个整数的最大公约数常用算法小结
2015/03/05 PHP
PHP迭代与递归实现无限级分类
2017/08/28 PHP
actionscript与javascript的区别
2011/05/25 Javascript
jQuery中hide()方法用法实例
2014/12/24 Javascript
jquery图形密码实现方法
2015/03/11 Javascript
JS实现新浪博客左侧的Blog管理菜单效果代码
2015/10/22 Javascript
JavaScritp添加url参数并将参数加入到url中及更改url参数的方法
2015/10/26 Javascript
微信小程序  TLS 版本必须大于等于1.2问题解决
2017/02/22 Javascript
解决v-for中使用v-if或者v-bind:class失效的问题
2018/09/25 Javascript
详解javascript replace高级用法
2019/02/17 Javascript
对layui数据表格动态cols(字段)动态变化详解
2019/10/25 Javascript
使用webpack/gulp构建TypeScript项目的方法示例
2019/12/18 Javascript
vue-cli3.0实现一个多页面应用的历奇经历记录总结
2020/03/16 Javascript
javascript 易错知识点实例小结
2020/04/25 Javascript
小程序选项卡以及swiper套用(跨页面)
2020/06/19 Javascript
python实现文件分组复制到不同目录的例子
2014/06/04 Python
Python中的pass语句使用方法讲解
2015/05/14 Python
Python通过90行代码搭建一个音乐搜索工具
2015/07/29 Python
Python 3.8新特征之asyncio REPL
2019/05/28 Python
Tensorflow实现将标签变为one-hot形式
2020/05/22 Python
Python生成pdf目录书签的实例方法
2020/10/29 Python
python 基于wx实现音乐播放
2020/11/24 Python
Farfetch美国:奢侈品牌时尚购物平台
2019/05/02 全球购物
什么是.net的Remoting技术
2016/07/08 面试题
售后服务科岗位职责范文
2013/11/13 职场文书
上课睡觉检讨书
2014/01/28 职场文书
会计学自我鉴定
2014/02/06 职场文书
销售个人求职信范文
2014/04/28 职场文书
学校师德承诺书
2014/05/23 职场文书
关于运动会广播稿300字
2014/10/05 职场文书
售后服务承诺函格式
2015/01/21 职场文书
《黄山奇石》教学反思
2016/02/18 职场文书
五年级作文之学校的四季
2019/12/05 职场文书
浅谈PHP7中的一些小技巧
2021/05/29 PHP
深入解析MySQL索引数据结构
2021/10/16 MySQL