类和实例
类是创建实例的模板,而实例是一个一个具体的对象,每个对象有相同的方法,但各自的数据可能不同。有点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中定义即可
该属性可以被访问及更改