专栏首页不仅仅是python(二十八) 初遇python OOP面向对象编程-魔法方法(双下划线方法)

(二十八) 初遇python OOP面向对象编程-魔法方法(双下划线方法)

各位读者大大们大家好,今天学习python的面向对象编程-魔法方法(双下划线方法),并记录学习过程欢迎大家一起交流分享。

新建一个python文件命名为py3_oop5.py,在这个文件中进行操作代码编写:

#面向对象编程
#魔法方法

#打印1+2的值
print(1+2)#3
#这里实际是调用了
#int的魔法方法__add__()
print(int.__add__(1,2))
#打印字符串连接
print('a'+'b')
##这里实际是调用了
#str的魔法方法__add__()
print(str.__add__('a','b'))
#继续看Employee类
class Employee:
  raise_amount = 1.04#定义列变量
  def __init__(self,first,last,pay):
    self.first = first
    self.last = last
    self.email = first + '.' + last +'@email.com'
    self.pay = pay

  def fullname(self):
    return '{} {}'.format(self.first,self.last)

  def apply_raise(self):
    self.pay = int(self.pay * self.raise_amount)
  #如下魔法方法是
  #实际重写了内置函数repr()和str()
  #后面学到再说
  #repr一般用来调试,记录日志使用
  #面向开发者
  def __repr__(self):
    return 'Employee {} {} {}'.format(self.first,self.last,self.pay)
  #str一般用来显示信息
  #面向终端用户
  def __str__(self):
    return '{}-{}'.format(self.fullname(),self.email)
  #重写__add__
  #计算工资加和
  def __add__(self,other):
    return self.pay + other.pay  
  #重写__len__
  #计算全名长度
  def __len__(self):
    return len(self.fullname())

emp_1 = Employee('T','Bag',50000)
emp_2 = Employee('Mc','User',60000)
#打印对象,默认调用
#__str__()
print(emp_1.__str__())#T Bag-T.Bag@email.com
print(emp_1.__repr__())#Employee T Bag 50000
print(emp_1 + emp_2)#110000
print(len(emp_2))#7

运行结果:

3
3
ab
ab
T Bag-T.Bag@email.com
Employee T Bag 50000
110000
7

今天初学python的面向对象编程-魔法方法(双下划线方法)学习就到这里!

关注公号

下面的是我的公众号二维码图片,欢迎关注。

本文分享自微信公众号 - yale记(python_yale_learning),作者:yale记

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • (二十七) 初遇python OOP面向对象编程-继承

    各位读者大大们大家好,今天学习python的面向对象编程-继承,并记录学习过程欢迎大家一起交流分享。

    亚乐记
  • web爬虫-Selenium IDE安装使用

    今天将学习使用一个非常有用的浏览器插件Selenium IDE,用于网站的测试和自动化,这里以谷歌浏览器作为测试。

    亚乐记
  • (二十五) 初遇python OOP面向对象编程-类变量

    各位读者大大们大家好,今天学习python的面向对象编程-类变量,并记录学习过程欢迎大家一起交流分享。

    亚乐记
  • 一日一技:如何统计Python函数被调用了几次?

    青南
  • Python自建logging模块

    每一个logger对象,都有一个日志级别,它只会输出高于它level的日志。如果一个logger的level是INFO,那么调用logger.debug()是无...

    小破孩的梦想空间
  • 【CV中的Attention机制】BiSeNet中的FFM模块与ARM模块

    语义分割需要丰富的空间信息和相关大的感受野,目前很多语义分割方法为了达到实时推理的速度选择牺牲空间分辨率,这可能会导致比较差的模型表现。

    BBuf
  • Selenium的PO模式(Page Object Model)[python版]

    首先,我们要分离测试对象(元素对象)和测试脚本(用例脚本),那么我们分别创建两个脚本文件, LoginPage.py 用于定义页面元素对象,每一个元素都封装成组...

    流柯
  • PyQt 5信号与槽的几种高级玩法

    在Qt中,每一个QObject对象和PyQt中所有继承自QWidget的控件(这些都是QObject的子对象)都支持信号与槽机制。当信号发射时,连接的槽函数将会...

    博文视点Broadview
  • 一文了解 Python 的 “Magic” 方法

    在以前的文章中,我聊过了Python的 __getitem__ 和 __setitem__ 方法。这些方法被称为“魔法”方法、特殊方法或者dunger方法(译者...

    AI研习社
  • Loxodon.Framework.XLua

    Loxodon.Framework.XLua 是一个XLua的开源的MVVM框架,它做为Unity3D的MVVM框架Loxodon.Framework的插件来使...

    Loxodon Studio

扫码关注云+社区

领取腾讯云代金券