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中的实现
May 04 Python
JPype实现在python中调用JAVA的实例
Jul 19 Python
python数据分析数据标准化及离散化详解
Feb 26 Python
numpy中矩阵合并的实例
Jun 15 Python
Django中使用Celery的教程详解
Aug 24 Python
Python 利用切片从列表中取出一部分使用的方法
Feb 01 Python
python实现比对美团接口返回数据和本地mongo数据是否一致示例
Aug 09 Python
用python实现英文字母和相应序数转换的方法
Sep 18 Python
PYTHON绘制雷达图代码实例
Oct 15 Python
Centos7 下安装最新的python3.8
Oct 28 Python
Python全面分析系统的时域特性和频率域特性
Feb 26 Python
Python使用正则表达式实现爬虫数据抽取
Aug 17 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
destoon找回管理员密码的方法
2014/06/21 PHP
10个对初学者非常有用的PHP技巧
2016/04/06 PHP
php字符串比较函数用法小结(strcmp,strcasecmp,strnatcmp及strnatcasecmp)
2016/07/18 PHP
YII2.0框架行为(Behavior)深入详解
2019/07/26 PHP
基于Jquery的温度计动画效果
2010/06/18 Javascript
基于JQuery 滑动与动画的说明介绍
2013/04/18 Javascript
javascript内置对象arguments详解
2014/03/16 Javascript
解释&amp;&amp;和||在javascript中的另类用法
2014/07/28 Javascript
jQuery实现带延迟效果的滑动菜单代码
2015/09/02 Javascript
Bootstrap3 input输入框插入glyphicon图标的方法
2016/05/16 Javascript
实例讲解JavaScript中instanceof运算符的用法
2016/06/08 Javascript
利用js+css+html实现固定table的列头不动
2016/12/08 Javascript
angular框架实现全选与单选chekbox的自定义
2017/07/06 Javascript
JavaScript截屏功能的实现代码
2017/07/28 Javascript
详解react-webpack2-热模块替换[HMR]
2017/08/03 Javascript
关于ligerui子页面关闭后,父页面刷新,重新加载的方法
2019/09/27 Javascript
vue实现鼠标经过动画
2019/10/16 Javascript
vue 动态表单开发方法案例详解
2019/12/02 Javascript
javascript如何使用函数random来实现课堂随机点名方法详解
2020/07/28 Javascript
[01:51]2018年度CS GO最具人气外援-完美盛典
2018/12/16 DOTA
Python linecache.getline()读取文件中特定一行的脚本
2008/09/06 Python
Python字符串中查找子串小技巧
2015/04/10 Python
简单讲解Python中的字符串与字符串的输入输出
2016/03/13 Python
详解如何用OpenCV + Python 实现人脸识别
2017/10/20 Python
用python标准库difflib比较两份文件的异同详解
2018/11/16 Python
在python中做正态性检验示例
2019/12/09 Python
python如何删除列为空的行
2020/07/17 Python
python GUI计算器的实现
2020/10/09 Python
利用HTML5+CSS3实现3D转换效果实例详解
2017/05/02 HTML / CSS
意大利包包和行李箱销售网站:Bagaglio.it
2021/03/02 全球购物
上班看电影检讨书
2014/02/12 职场文书
法人授权委托书范本
2014/04/04 职场文书
2014党员民主评议个人总结
2014/09/10 职场文书
村委会贫困证明范本
2014/09/17 职场文书
幼儿园教师暑期培训心得体会
2016/01/09 职场文书
小程序后台PHP版本部署运行 LNMP+WNMP
2021/04/01 Servers