python 面向对象- 内置函数

    Python编程 wuya 32次浏览 已收录 0个评论

    内置函数

    • 回顾
      内置函数 触发时机
      __ init __ 构造方法,创建完对象初始化时
      __ del __ 析构方法,对象即将销毁时
      __ getattr __ 获取不存在的属性
      __ setattr __ 设置属性
      __ delattr __ 删除属性
      __ getitem __ 当做字典操作,获取属性
      __ setitem __ 当做字典操作,设置属性
      __ delitem __ 当做字典操作,删除属性
      __ call __ 将对象当做函数调用时
      __ str __ 打印或转换为字符串时
    • repr与eval
      d = {'name': 'dahua', 'age': 18}
      
      # 得到对象的字符串表示形式
      s = repr(d)
      print(s, type(s))
      
      # 执行有效的python代码字符串
      d2 = eval(s)
      print(d2, type(d2))
      
      a = 10
      b = 20
      
      c = eval('a + b')
      # c = a + b
      print(c)
      • 自定义对象
      class Person:
          def __init__(self, name, age):
              self.name = name
              self.age = age
      
          # 对象使用repr方法处理时会自动触发该方法
          # 通常返回对象的字符串表示形式
          def __repr__(self):
              # print('__repr__')
              return "Person('{}', {})".format(self.name, self.age)
      
          # 打印对象时会自动触发,若没有则会尝试__repr__,还没有返回 类名+地址
          def __str__(self):
              return 'name: {} age: {}'.format(self.name, self.age)
          
      xiaoming = Person('xiaoming', 18)
      
      s = repr(xiaoming)
      print(s)
      
      xm = eval(s)
      print(xm, type(xm))   
    • 算术运算符重载
      • 示例
      class Number:
          def __init__(self, num):
              self.num = num
      
          def __str__(self):
              return str(self.num)
      
          # 对象出现在 '+' 的左边时会自动触发
          def __add__(self, other):
              print('__add__')
              return self.num + other
      
          # 对象出现在 '+' 的右边是会自动触发
          def __radd__(self, other):
              print('__radd__')
              return self.num + other
      
          # '+='运算时会自动调用,若没有此方法,则会尝试__add__
          def __iadd__(self, other):
              print('__iadd__')
              self.num += other
              return self
      
      n = Number(10)
      
      # ret = n + 20
      # ret = 20 + n
      # print(ret)
      
      n += 20
      print(n)
    • 自己研究
    运算 左边 右边 复合
    减法 __ sub __ __ rsub __ __ isub __
    乘法 __ mul __ __ rmul __ __ imul __
    除法 __ truediv __ __ rtruediv __ __ itruediv __
    求余 __ mod __ __ rmod __ __ imod __
    • 关系运算符重载
      class Number:
          def __init__(self, num):
              self.num = num
      
          # 大于 self > other 或 other < self
          def __gt__(self, other):
              print('__gt__')
              return self.num > other
      
          # 大于等于
          def __ge__(self, other):
              print('__ge__')
              return self.num >= other
      
          # 小于
          def __lt__(self, other):
              print('__lt__')
              return self.num < other
          
          # 小于等于
          def __le__(self, other):
              print('__le__')
              return self.num <= other
      
          # 等于
          def __eq__(self, other):
              print('__eq__')
              return self.num == other
      
          # 不等于:!=,若重写此方法则会调用,
          # 若没重写,则会尝试调用__eq__
          def __ne__(self, other):
              print('__ne__')
              return self.num != other
          
      n = Number(5)
      
      print(n > 4)
      print(4 < n)
      
      print(n < 4)
      print(4 > n)
      
      print(n == 4)
      print(n != 4)
      
      print(n >= 4)
      print(4 <= n)
      
      print(n <= 4)
      print(4 >= n)
    • __new__
      • 示例
      class Person(object):
          # 用于创建对象,需要返回创建的对象
          def __new__(cls, *args, **kwargs):
              print('__new__')
              return object.__new__(cls)
      
          def __init__(self):
              print('__init__')
              
      # p = Person.__new__(Person)
      # p.__init__()
      # 相当于上面的操作,但是不要这样用
      # p = Person()
      
      p1 = Person()
      p2 = Person()
      
      print(id(p1))
      print(id(p2))  

    学海无涯 , 版权所有丨如未注明 , 均为原创丨转载请注明python 面向对象- 内置函数
    喜欢 (0)
    发表我的评论
    取消评论
    表情 加粗 删除线 居中 斜体 签到

    Hi,您需要填写昵称和邮箱!

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址