python中面向对象的类,方法,实例
编程入门学习中经常看到面向对象的类,方法,实例的概念。
类
类即种类,也就是事先定义的特征模版,用于创建一些具有相同特征的对象。
python中的类使用如下语句定义:
class Student(object):
pass
每个类都需要继承一个父类,如果没有父类需要继承默认object类。
实例
实例即通过类创建的具有某些属性的特定对象。
比如通过刚刚的Student类创造实例:
bob = Student()
可以自由地给实例添加属性:
bob.name = 'boby'
方法
刚刚给实例绑定属性也可以在类中完成。 类中定义的函数称为方法。
其中有一种特殊方法 __init__
可以给类绑定默认必须属性。
class Student(object):
def __init__(self,name,score):
self.name = name
self.score = score
在使用该类定义实例时就必须传入这些参数:
bob = Student('boby',60)
注意到__init__
方法第一个参数永远都是self,代表定义的实例本身。
除了特殊方法,类中也可以定义其他普通方法。如定义输出方法:
class Student(object):
def __init__(self,name,score):
self.name = name
self.score = score
def print_name_score(self):
print(self.name,self.score)
类中的方法第一个参数一定是self,并且调用时无需传入该参数。
此时定义一个实例则该实例拥有print_name_score的方法:
bob.print_name_score()
这样外部在使用实例的方法时不用考虑内部实现方式。这就是面向对象编程的一个特点:数据封装。
面向对象高级编程
__slot__
该特殊方法可限制实例可以添加的属性:
class Student(object):
__slot__ = ('name','age')
bob = Student()
此时bob实例只可以添加name和age方法(属性)。
不过子类在继承父类后并不继承__slot__
,如果子类中重新定义__slot__
则子类继承父类__slot__
及自身定义的__slot__
。
多重继承:
Python允许一个类继承多个父类:
class dog(animal,pet)
子类可以获得所有父类的方法。
__call__
如果想直接调用实例即可有返回而非调用实例的方法,则需定义一个特殊方法__call__
class Student(object):
def __init__(self,name):
self.name = name
def __call__(self):
print('My name is %s'%name)
bob = Student('boby')
bob()
类与模块
在导入模块时经常看到两种写法:
import module
from module import mo
其中第一种写法直接import module是将该模块完全载入。第二种写法则只载入模块中的一个对象,这个对象可能是一个类,或者函数。