1.继承类
如果已经定义了父类Person,需要定义新的Student和Teacher类时,可以直接Person类继承
class Person:
def __init__(self,name,gender):
self.name=name
self.gender=gender
定义子类时,只需要把额外的属性加上即可
class Student(Person):
def __init__(self,name,gender,score):
super(Student,self).__init__(name,gender) #super(Student,self).__init__(name,gender) 去初始化父类
self.score=score #super(Student,self) 返回当前类继承的父类,然后调用__init__方法
2.判断类型
函数isinstance() 可以判断一个变量的类型,返回True 或False
s=Student('li','male','59')
print(isinstance(s,Person))
print(isinstance(s.Student))
3.多态
任何对象,只要有read()方法,就成为File-like-Object, 都可以传给json.load( )
#编写File-like-Object
#把字符串 r'['li','zhang','sun','wang']包装成File-like-Object,并由json.load()解析
import json
class Students(object):
def read(self):
return r'['li','zhang','sun','wang']
s=Students()
print(json.load(s))
4.多重继承
多重继承的目的是从两种继承中分别继承出子类,以便组合功能使用
class D(B,C):
def __init__(self,a):
super(D,self).__init__(a)
print('init D ...')
5.获取对象信息
type( )函数:获取变量的类型
dir( )函数:获取变量的所有属性 #返回的是字符串列表
#用filter( ) 函数和dir( ) 函数,只保留自己定义的属性
class Person(object):
def __init__(self,name,gender):
self.name=name
self.gender=gender
class Student(Person):
def __init__(self,name,gender,score):
super(Student,self).__init__(name,gender)
self.score=score
s=Student('lii','male','99') # x.strip('__')表示去掉字符串的'__'子串
print(dir(s)) #如x为__class__,则去掉后为class,但x 不等于x.strip('__'),返回False
print(list(filter(lambda x:x= =x.strip('__'),dir(s)))) # x 等于x.strip('__'),返回True
如果已知一个属性名称,要获取或者设置对象的属性,用getatter()和setatter( )函数了
s=Student('li','male','59')
getatter(s,'name') #获取name属性 ,返回‘li’
setatter(s,'name','wang') #设置name属性,返回‘wang’
定义Person,提供任意额外的关键字参数
class Person(object):
def __init__(self,name,gender,**kw):
self.name=name
self.gender=gender
for k,v in kw.iteritems():
setatter(self,k,v)
p=Person('zhang','male',age=25,score=99)
print(p.age)
print(p.score)