美文网首页
2018-09-10 Object-oriented

2018-09-10 Object-oriented

作者: 初见_0308 | 来源:发表于2018-09-13 19:57 被阅读0次

(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),计算耗费的时间,考虑在原有的代码基础上应该如何调整

(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升的耗油量,输出到达目的地汽车总油耗

相关文章

网友评论

      本文标题:2018-09-10 Object-oriented

      本文链接:https://www.haomeiwen.com/subject/uijsgftx.html