#!/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 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)