zoukankan      html  css  js  c++  java
  • (一)Python入门-6面向对象编程:10特殊方法和运算符重载-特殊属性

    一:特殊方法和运算符重载

      Python的运算符实际上是通过调用对象的特殊方法实现的。比如:

    #运算符-特殊方法
    a = 20
    b = 30
    c = a + b
    d = a.__add__(b)
    print('c=',c)
    print('d=',d)

    运行结果:

      c= 50
      d= 50

    常见的特殊方法统计如下:

      

    每个运算符实际上都对应了相应的方法,统计如下:

      

    我们可以重写上面的特殊方法,即实现了“运算符的重载”。

     【操作】运算符的重载

    #测试运算符的重载
    class Person:
        def __init__(self,name):
            self.name = name
    
        def __add__(self, other):
            if isinstance(other,Person):
                return '{0}-----{1}'.format(self.name,other.name)
            else:
                return '不是同类对象不能相加'
    
        def __mul__(self, other):
            if isinstance(other,int):
                return self.name*other
            else:
                return '不是同类对象不能相加'
    
    p1 = Person('jack')
    p2 = Person('jason')
    print(p1 + p2)
    print(p1*5)

    运行结果:

      jack-----jason
      jackjackjackjackjack

    二:特殊属性

      Python对象中包含了很多双下划线开始和结束的属性,这些是特殊属性,有特殊用法。常见的特殊属性:

        

    【操作】特殊属性

    #测试特殊属性
    class A:
        pass
    class B:
        pass
    class C(B,A):
        def __init__(self,nn):
            self.nn = nn
        def cc(self):
            print('cc')
    
    c1 = C(5)
    print(dir(c1))
    print(c1.__dict__)
    print(c1.__class__)
    print(C.__bases__)
    print(C.mro())
    print(A.__subclasses__())

    运行结果:

      ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'cc', 'nn']
      {'nn': 5}
      <class '__main__.C'>
      (<class '__main__.B'>, <class '__main__.A'>)
      [<class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>]
      [<class '__main__.C'>]

  • 相关阅读:
    判断应用程序是否是当前激活程序(获得焦点的程序)
    MFC的CListCtrl的使用与技巧
    VC/MFC中为程序定义全局快捷键
    [原]MFC中DIALOG(对话框)程序响应加速键(快捷键)
    问题:CListCtrl如何高亮选中一行 http://zhidao.baidu.com/question/100664911.html 扩展:单行、双行及完成状态的字体等等。。。
    C++读取INI文件
    键盘钩子监测按键后,获取键码及按键名称(MFC)
    一个分布式服务器集群架构方案
    Discuz!NT
    easyui validatebox 验证类型
  • 原文地址:https://www.cnblogs.com/jack-zh/p/10850094.html
Copyright © 2011-2022 走看看