Python入门-6面向对象编程:10特殊方法和运算符重载-特殊属性

Posted jack-zh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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‘>]

以上是关于Python入门-6面向对象编程:10特殊方法和运算符重载-特殊属性的主要内容,如果未能解决你的问题,请参考以下文章

Python入门-6面向对象编程:07面向对象三大特征(封装继承多态)-继承

Python入门-6面向对象编程:02类的定义-类和对象的关系-构造函数-实例属性-实例方法

Python入门-6面向对象编程:01面向对象和面向过程区别-对象的进化

Python入门-6面向对象编程:03类对象-类属性-类方法-静态方法

Python入门-6面向对象编程:09多态

Python入门-6面向对象编程:12组合