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'>]

  • 相关阅读:
    【转】php中XML、XSLT的结合运用
    【转】PHP 5.3 5.4 5.5 5.6特性
    Go语言的编程范式
    Appcelerator Titanium Studio: JNI_CreateJavaVM missing error
    良好Web系统架构的几个因素
    决定去掉博客中附加的多说评论
    用PHP实现Windows域验证
    Netbeans 8.0.1 坑爹请不要升级
    教程:30分钟学会Adobe Premiere
    完美:adobe premiere cs6破解版下载[序列号+汉化包+破解补丁+破解教程]
  • 原文地址:https://www.cnblogs.com/jack-zh/p/10850094.html
Copyright © 2011-2022 走看看