继承、多继承、魔术方法

Tips:
面向对象的三大特点:封装、继承和多态。

一、继承
  class Pig(object): # object 也是一个类 所有类的父类 这就是继承。如果类名后不带括号,就是继承父类
              # 查看object类,按住Ctrl后鼠标左键点
    pass # 继承的语法就是在定义类的时候,在类名后面括号中填入父类的类名

 

  class Father:
    money = '1个亿'

    def __init__(self,name):
      self.name = name


  class Mother:
    beautiful = '10分' # 属性 特征

    def cook(self): # 方法 行为
      print('老妈烧的一手好菜')


  class Son(Father,Mother): # 继承的好处:父类的属性和方法,子类都可以直接使用

    def __init__(self,name):
      self.name = name

二、多继承

  def cook(self): # 方法的重写 覆盖掉原来父类的方法
    print('%s炒菜吃饭,吃中毒了'%self.name)
    # 子类重写之后要调用父类的方法
    # self.cook() # 想要重新使用父类的方法,不能用实例名.方法,这样做调用的其实是自己
    Mother.cook(self)  # 1 通过类名直接调用方法
    super().cook()       # 2 用super()去调用方法 只会调用一次(从最顶级类找,找到1个就停止)

可以多继承:
# 1 所有父类的属性和方法,子类都可以使用。

# 2 继承查找的顺序是:从左到右


  son = Son('小张') # 初始化的时候,如果父类有多个参数,儿子调用时必须也传参数
  print(son.money)
  print(Son.__bases__) # 类名.__base__ 特殊属性 作用是查看类的直接父类(基类)

# 访问类的属性或方法-->类 中找-->直接基类(父类) 中找-->间接基类(object类)-->还找不到的话,就报错。

  son.cook()
  print(Son.__mro__) # 类名.__mro__ 特殊属性,不是私有属性,作用查看类的继承顺序

 


三、魔术方法

  class A:

    def __init__(self,num):
      self.num = num

    def __add__(self, other): # 这个是魔术方法 other是另一个方法
      sum = self.num + other.num
      return sum

  a = A(2)
  b = A(518)
  print(a+b) # 触发这个add魔术方法

 

  class Base:
    def __str__(self): # 魔术方法 这个str魔术方法必须写返回值,必须是字符串
      print()
      return '帅帅帅'

    def __repr__(self): # 魔术方法 这个repr魔术方法必须写返回值
      return '我是repr方法'

    def __call__(self, *args, **kwargs): # 魔术方法 实现类的实例可以调用
      print('啦啦啦')


  a = Base()
  print(a)
# 如果有srt方法,就会调用str方法,没有的话,就去找repr 还没有的话打印地址;
# 在交互模式下,直接输出对象,显示__repr__的返还值
# 交互模式对开发者更友好

 

一些魔术方法和类中的查询信息的方法

 

转载于:https://www.cnblogs.com/nealxyz/p/9518518.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值