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

  • 相关阅读:
    USDT与omniCore钱包
    C# 事件(第四章)
    委托进阶(第三章)
    委托入门(第二章)
    委托入门(第一章)
    asp.net页面生命周期
    在WEB程序中小心使用"ThreadStatic"
    如何在一个请求中共享数据或对象实例
    .net垃圾回收机制原理
    MVC模式简介
  • 原文地址:https://www.cnblogs.com/jack-zh/p/10850094.html
Copyright © 2011-2022 走看看