#!/usr/bin/env pythonpython
# -*- coding:utf-8 -*-app
# author: Changhua Gongide
class person(object):继承
def __init__(self, name):ip
self.name = name # 静态属性内存
def say(self): # 方法,动态属性utf-8
print("say...")it
def speak(self):io
print("speak...")class
class relationship:
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[0].name)
print("xiongxoing`s friend is %s." % p2.friends[0].name)