(一)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'>]

posted on 2019-05-11 23:37  JACK#zhang  阅读(163)  评论(0编辑  收藏  举报