面向对象就是:把数据及对数据的操作方法放在一起,作为一个相互依存的整体——对象。对同类对象抽象出其共性,形成类。类中的大多数数据,只能用本类的方法进行处理。类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信。程序流程由用户在使用中决定。对象即为人对各种具体物体抽象后的一个概念,人们每天都要接触各种各样的对象,如手机就是一个对象。
面向对象编程(OOP:object-orientedprogramming)
面向对象的基本特性:抽象、封装、继承、多态。
面向对象技术简介一个类占有一个独立的空间,类中的属性叫做类变量,类中的函数,叫做类的方法。
类(Class):也可以成为类对象。类对象中包含了一批实例对象共有的属性和方法。
类变量:定义在类中且在函数体之外的变量。类变量在所有的实例变量中是共享的,类变量修改了,所有实例对象读取到的值都会修改。
实例变量:定义在类的实例方法中的变量,只作为当前实例的属性。
方法:类中定义的函数。包含实例方法,类方法,静态方法。
方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。其实只是在派生类中添加了同名方法,以至于查询方法时不会再向基类查询
继承:即一个派生类(derivedclass)继承基类(baseclass)的属性和方法。继承也允许把一个派生类的对象作为一个基类对象对待。(就是说派生类还可以再派生孙子类)
实例化:创建一个类的实例,类的具体对象。在实例对象开辟一个空间,并为实例对象添加对类的引用。并没有复制类中的属性和方法到实例对象中。
实例对象:通过类定义的数据结构实例。
python中一切皆为对象,类型的本质就是类。
类提供了一种组合数据和功能的方法。创建一个新类意味着创建一个新的对象类型,从而允许创建一个该类型的新实例。每个类的实例可以拥有保存自己状态的属性。一个类的实例也可以有改变自己状态的(定义在类中的)方法。
类(Class):用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
class定义格式:
classClassName:'类的帮助信息'#类文档字符串class_suite#类体
类的帮助信息可以通过ClassName.__doc__查看。
class_suite由类成员,方法,数据属性组成。
class派生类名(基类名):...
注:在Python中建议函数名是以小写字母开头,类名是以大写字母开头;。
object是所有类的超类(基类)
>>>help(list)#原来使用的list()函数就是一个类Helponclasslistinmodulebuiltins:classlist(object)|list(iterable=(),/)||Built-inmutablesequence.|......|__add__(self,value,/)|Returnself+value.|__init__(self,/,*args,**kwargs)|Initializeself.Seehelp(type(self))foraccuratesignature.|append(self,object,/)|Appendobjecttotheendofthelist.classPerson:#定义一个人类role='person'#人的角色属性都是人def__init__(self,name):#self:在实例化时自动将对象/实例本身传给__init__的第一个参数self.name=name#每一个角色都有自己的昵称;defwalk(self):#人都可以走路,也就是有一个走路方法print("personiswalking...")print(Person.role)#查看人的role属性print(Person.walk)#引用人的走路方法,注意,这里不是在调用p1=Person("张三")#实例化的过程就是类——>对象的过程p1.walk()__init__,这个方法被称为构造方法,里面的name是实例变量。构造方法用于构造该类的对象,Python通过调用构造方法返回该类的对象。python提供一个功能就是:若开发者没有定义构造函数,python会自动提供一个只包含self参数默认的构造方法。
class类名(类型名):def__init__(self,参数1,参数2):self.对象的属性1=参数1self.对象的属性2=参数2def方法名(self):passdef方法名2(self):pass对象名=类名(1,2)#对象就是实例,代表一个具体的东西#类名():类名+括号就是实例化一个类,相当于调用了__init__方法#括号里传参数,参数不需要传self,其他与init中的形参一一对应#结果返回一个对象对象名.对象的属性1#查看对象的属性,直接用对象名.属性名即可对象名.方法名()#调用类中的方法,直接用对象名.方法名()即可
classStudent():def__init__(self,name,sex,height,weight):self.name=nameself.sex=sexself.height=heightself.weight=weightdefstand(self):print("%s起来唱首歌!"%self.name)stu=Student("天亮","男","166","99")print(stu.name)print(stu.sex)stu.stand()在Python中,创建类的实例只要调用一个类,仿佛它是函数就行了。不像C++或Java有一个明确的new操作符。
classMyClass:"""Asimpleexampleclass"""i=12345deff(self):return'helloworld'#MyClass.i和MyClass.f就是有效的属性引用,将分别返回一个整数和一个函数对象。x=MyClass()#类的实例化使用函数表示法;创建类的新实例并将此对象分配给局部变量x。x.f()#x.f是一个方法对象,方法在绑定后立即被调用:a=MyClass#a任然代表MyClassprint(a)#
在_init_()方法中使用*args和**kwags根据参数数量来进行判断如何执行构造函数,实现其他语言中构造函数的重载
importtimeclassDate:def__init__(self,*args):iflen(args)==0:t=time.localtime()args=(t.tm_year,t.tm_mon,t.tm_mday)self.year,self.month,self.day=args>>>a=Date(2012,12,31)#明确指定日期>>>b=Date()#信息模糊,指示不明Python中只有两种对象:为了明确起见,让我们称它们为类型和非类型。非类型可以称为实例,但该术语也可以指类型,因为类型总是另一种类型的实例。类型也可以被称为类,我有时也称它们为类。
1)、object和type是python中的两个源对象
2)、查看object的类型。看到object是type的实例,我们另外也用.__class__来核实它和type()的输出是一样的。
3)、object是type的超类。type的类型是它自己
4)、python中类型本身也是对象,称为类型对象typeobjects。
更多内置对象,python可不止只有两个源对象。通过这两个源对象可以繁育出一堆对象: