yanglgzh 发表于 2018-8-14 13:17:48

Python 多重继承

  #!/usr/bin/env python
  # -*- coding:utf-8 -*-
  # author: Changhua Gong
  class person(object):
  def __init__(self, name):
  self.name = name# 静态属性
  def say(self):# 方法,动态属性
  print("say...")
  def speak(self):
  print("speak...")

  class>  def mk_friends(self, somebody):
  print("%s is making friends with %s." % (self.name, somebody.name))
  '''这里somebody(类)做为参数,保证了某个人更名后仍是新名字,因为修改实例的属性是去修改对应的内存数据'''
  self.friends.append(somebody)# 给自己的朋友列表里添加新交的朋友,暂不考虑重复交朋友问题
  somebody.friends.append(self)# 对方的朋友列表里添加新交的朋友
  '''
  多重继承时,实例化时,优先寻找子类的构造方法,如无则按照从左往右的顺序依次寻找父类的构造方法,
  寻找到第一个构造方法后就不再寻找后面父类的构造方法,多重继承时推荐使用super关键继承父类构造。
  class E:
  #经典类
  pass
  class E1(object):
  #新式类
  pass
  有如下继承方式:类A继承object,类B、C继承A,类D多继承B、C
  py2中,经典类按照深度优先继承,新式类按照广度优先继承;
  py3中,经典类和新式类都按照广度优先继承。
  Py2中默认都是经典类,只有显式继承了object才是新式类
  Py3中默认都是新式类,不必显式的继承object?
  '''
  class man(relationship, person):
  def __init__(self, name, age):# 这里重写构造方法,不重写则继承父类的构造方法
  #person.__init__(self, name)# 继承父类的构造方法
  super(man, self).__init__(name)   # 继承父类的构造方法,另一种写法, 注意self的位置,多重继承时推荐这种写法
  self.age = age
  self.friends = []
  def say(self):
  person.say(self)# 继承父类的方法,当然可以注释掉,不继承父类的方法
  print("say hello...%s" % (self.name))
  print("say hello...%s" % (self.age))
  p1 = man("daidai", 23)
  p1.name = "new boy"
  p1.say()
  p2 = man("xiongxiong", 18)
  p2.name = "new girl"
  p1.mk_friends(p2)
  print("daidai`s friend is %s." % p1.friends.name)
  print("xiongxoing`s friend is %s." % p2.friends.name)
页: [1]
查看完整版本: Python 多重继承