(1)对象
对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。
对象的静态特征和动态特征 (人 )
对象静态特征:人的身高、汽车的颜色、电脑的重量。
对象动态特征:人的跑步行为、汽车的启动功能、电脑的关机行为
人们将对象的静态特征抽象为变量;动态特征抽象为行为,称为方法。
一个对象是由一组变量和一组方法组成。
(2)类(class)
类:将具有相同属性和相同行为的一组对象称为类。 模具 实例
类是一个抽象的概念,要利用类来解决问题,必须要使用类去创建一个类的实例对象,然后使用类的实例对象去访问类的属性和方法去实现程序的功能。
例如:就如同“汽车”本身是一个抽象的概念,只用使用了该类中的一辆具体的汽车,才能访问汽车的属性和方法
(3) 编程
面向过程编程:
面向过程编程是一种以事件为中心的编程思想,分析解决问题的步骤,然后使用函数或语句块把这些步骤一步一步实现,使用的时候一个一个一次调用就可以了。使用面向过程思想编写的代码,相对条理更清晰,更易读。
但是随着程序的增加,系统的膨胀,过程变得越来越复杂,变的不容易维护,一旦过程需要调整,修改十分麻烦,甚至很多代码都要重写
面向对象编程:
是一种以事物为中心的编程思想,把问题分解成各个对象,建立对象的目的不是为了完成一个步骤,而是分析在解决问题的步骤中事物的行为
面向对象强调的是将问题对象化,因为问题的解决都是由对象参与,而且这种编程思想更贴近现实。
使用面向对象思想编写的代码,将数据和功能都封装在对象中,即使后续需要调整,只需要修改特定的对象,代码更易维护
例子:
类:“笔”作为一个抽象的概念,可以被看成是一个类。
实例:一支实实在在的笔则是“笔”这种类型的对象。
实例的方法:笔可以写字,因此“写字”就是笔这个类的一种方法。
实例变量:每支笔有自己的颜色,“颜色”就是笔的变量。
类的变量:某种类型的笔有“产量”,但是这个“产量”并不属于某一支笔,因此“产量”是类变量,而不是实例变量
(4)类:
面向对象编程最主要的两个概念是:类(class)和对象(object)
类是一种抽象的类型,对象是这种类型的实例
一个类可以有属于它的函数,被称为类的“方法”
一个类/对象可以有属于它的变量,被称为类/对象的“域”
域根据所属不同,又分别被称为“类变量”和“实例变量”
方法和域合称为类的属性
方法 和 变量
类 就是一个容器 (变量 函数 对象 封装)
创建类
class语句后跟类名,缩进语句块表示类的内部
在python中习惯在定义类时,将首字符大写,用于区分类名和函数名、变量名
类的方法和普通函数区别:
类方法必须有一个额外的第一个参数名称self,但是在调用这个方法的时候,不需要为这个参数赋值,python会提供这个值,这个特别的参数指向对象本身,按照惯例它的名字是self,所以方法至少有一个参数self.
self变量有什么用?如何给self变量赋值?
例子:假设有一个类 MyClass 模型 和 一个类的对象 MyObject(),当调用对象的方法MyObject.method(arg1,arg2)时,会由python自动转为 MyClass.method(MyObject,arg1,arg2)
__init__方法
def __init__(self, myname, mysalary):
self.name = myname
self.salary = mysalary
Employee.empCount += 1
__init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法。__init__个对象被建立时,马上运行,而不是像其他类方法一样,方法在类的一可以通过对个这个方法传递参数来初始化对象。
注意:这个方法的名称开始和结尾都是双下划线
创建对象:
AAA = Employee("Zara", 2000)
emp2 = Employee("Manni", 5000)
访问方法和属性:
使用点运算符来访问对象的方法,而类变量使用类名来访问。
emp1.displayEmployee()
emp2.displayEmployee()
print "Total Employee %d" % Employee.empCount
Employee.empCount = 10
Print Employee.empCount
类的变量:
类的变量由一个类的所有对象共享使用,所以当某个对象对类的变量做了改动,这个改动会反映到所有其他的对象上
对象的变量由类的每个对象拥有,即对象的变量不是共享的
如果想要定义私有变量,即只能在类内部使用,不能再类外使用的变量,只
需要在变量名前加双下划线
1、假如有一辆汽车,速度是60km/h,从A地行驶到B地(距离100km),计算耗费的时间,分别以面向过程、面向对象两种不同的编程思想设计程序
再假设换一辆汽车,速度是100km/h,从A地行驶到C地(距离350km),计算耗费的时间,考虑在原有的代码基础上应该如何调整
![](https://img.haomeiwen.com/i13336491/4b54bd97b891cd39.png)
(5)继承
面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制,继承可以理解为类型和子类型之间的关系
被继承的类称为基本类或超类,继承后的类被称为导出类或子类
子类能够继承超类的属性,即方法和域,通过这种继承机制,相同的属性就不需要重复编写,因此很好的实现了代码重用
1、在python中继承是通过在定义子类时,将超类的名称作为一个元组跟在子类名称后来表示。
如: class B_Classr(Classr):
2、子类在继承过程中,可以新增独有的属性:
class Class1:
def __init__(self):
self.move='移动'
def sleep(self):
print('去睡觉')
class B_Class1(Class1):
def eat(self): #新增独有属性
print('去吃饭')
3、子类在继承过程中,还可以重写超类的方法
class Class1:
def __init__(self):
self.move='移动'
def sleep(self):
print('去睡觉')
class B_Class1(Class1):
def eat(self):
print('去吃饭')
def sleep(self): #重写超类中sleep属性
print('不去睡觉')
4、子类也可以同时继承于多个超类
class Class1:
def __init__(self):
self.move='移动'
def sleep(self):
print('去睡觉')
A=Class1
class Class2:
def lashi(self):
print('去拉屎')
B=Class2
class B_Class(A,B):
def eat(self):
print('去吃饭')
def sleep(self):
print('不去睡觉')
5、通过子类继承超类,能够提高代码的重用性
同时还具备另外一个优点:如果超类发生变更,它能自动的反映到子类中
题1、还是从A地出发去B地(距离100km/h),这次除了可以使用汽车,还有另外一种方式-自行车,汽车速度60km/h,自行车速度20km/h,计算耗时
同时针对汽车,这次再增加一个属性-油耗,每公里0.1升的耗油量,输出到达目的地汽车总油耗
![](https://img.haomeiwen.com/i13336491/07c647a0ef10cc04.png)
网友评论