首页 > 编程语言 > 详细

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

时间:2019-05-12 00:11:08      阅读:199      评论:0      收藏:0      [点我收藏+]

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

  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特殊方法和运算符重载-特殊属性

原文:https://www.cnblogs.com/jack-zh/p/10850094.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!