对象对象编程三原则
1,封装(隐藏具体实现过程,对外只提供调用接口)
2,继承(一个对象或得另一个对象属性的过程,用于实现按层分类的概念)
3,多态(允许一个接口被一个通用的类动作使用的特性,具体使用哪个动作与应用场合有关)
python的类是一种数据结构,是自定义的类型。
python 中class语句类似def ,是可以执行的代码;直到运行class语句后类才会存在
class语句内,任何赋值语句都会创建类属性
每个实例对象对会继承类的属性并或得自己的名称空间
在OOP编程中,实例就像是带有“数据”的记录,而类是处理这些记录的“程序”
通过实例调用方法相当于调用所属类的方法来处理当前实例
类似:instance.method(args...)会被自动转换为:class.method(instance,args ....)
如前面的例子,x.display()会被自动转换为:FirstClass.display(x),即调用类的方法来处理实例X
1,因此类的每个方法必须具有self参数,它隐含当前实例之意
2,在方法内对self属性做赋值运算会产生每个实例自己的属性,Python规定,没有实例,方法不允许被调用,此即为“绑定”
Class语句中的赋值语句会创建类属性,如前面例子中的spam,在类方法中对传给方法的特殊参数self进行赋值会创建实例的属性
如:
>>>class MyClass():
gender = 'male' #类属性
def setName(self,who):
self.name = who
>>>x=MyClass()
>>>y=MyClass()
>>>x.gender
'male'
>>>x.name #报错 因为在setName方法调用之前,MyClass 类不会把name属性附件到实例X上,当然也可以重载__ini___ 创建构造器直接为实例提供
3,Python 中以__vars__()之类的方法,都是被python调用中,有解释器自动执行的
具体到类,python创建实例时,会自动调用类中的__int__方法,以隐性地为实例提供属性
__ini__方法被称为构造器。如果类中没有定义__init__方法,实例创建之初仅是一个简单的名称空间
如:
>>>class MyClass(): #这里如果传参,是传的基类,不是初始属性
>>> data = 'hello world'
>>> def __init__(self,x):
>>> self.str1=x
可以通过a1=MyClass('shitian') #实例类,并重载赋值给str1 ,