类和实例
类是创建实例的模板,而实例是一个一个具体的对象,每个对象有相同的方法,但各自的数据可能不同。有点c语言中结构体的意思。
定义一个实例
class Student(object): def __init__(self, name, score): self.name = name self.score = score创建后可以传递参数
>>> bart = Student('Bart Simpson', 59) >>> bart.name 'Bart Simpson' >>> bart.score 59数据封装的使用
class Student(object): def __init__(self, name, score): self.name = name self.score = score def print_score(self): print('%s: %s' % (self.name, self.score)) def get_grade(self): if self.score >= 90: return 'A' elif self.score >= 60: return 'B' else: return 'C'实际操作:
lisa = Student('Lisa', 99) 两个不同的实例 bart = Student('Bart', 59) print(lisa.name, lisa.get_grade()) print(bart.name, bart.get_grade())访问限制
一般的类可以被外部代码更改
>>> bart = Student('Bart Simpson', 59) >>> bart.score 59 >>> bart.score = 99 >>> bart.score 99为了防止更改,在属性的名称前加两个下划线,也限制了外部代码访问
class Student(object): def __init__(self, name, score): self._ _name = name self._ _score = score def print_score(self): print('%s: %s' % (self._ _name, self._ _score))为了使得可以访问,添加get_属性 函数定义操作,以及更改操作
class Student(object): ... def get_name(self): return self.__name def get_score(self): return self.__score def set_score(self, score): self.__score = score继承和多态
1.继承
父类
class Animal(object): def run(self): print('Animal is running...')子类继承,自动拥有了父类的功能,且可以自己添加功能 class Dog(Animal): def run(self): print('Dog is running...') 注意:当类与父类存在相同的功能时,父类继承过来的功能会被子类的所覆盖2.多态
子类可以继承父类的类型,呈现多种类
函数也可以接收类
def run_twice(animal): animal.run() animal.run()子类被函数调用时,如果函数run了父类的功能,子类会继承或者覆盖该功能获取对象信息
type()函数:其返回值是class类型,可以是被对象的类型,指向函数或者类
isinstance()函数:判断一个对象是否是某种类型,或者某些类型中的一种
dir() :获得一个对象的所有属性和方法
>>> dir('ABC') ['__add__', '__class__',..., '__subclasshook__', 'capitalize', 'casefold',..., 'zfill']
len(): 获取一个对象的长度
lower(): 返回小写的字符串
实例属性和类属性
由前面可以知道实例属性可以有self.属性进行绑定,类该怎么绑定呢?
class Student(object): name = 'Student' #直接在class中定义即可
该属性可以被访问及更改