Python(基础)第四天

来源:互联网 发布:海文网络班 编辑:程序博客网 时间:2024/05/22 12:27

面向对象编程:

围绕函数设计程序,也就是那些能处理数据的代码块,这被称作面向过程的编程方式。

类和对象时面向对象编程的两个主要方面。一个类(Class)能创建一种新的类型(Type),其中对象(Object)就是类的实例(Instance)。

从属于对象或者类的变量叫做字段(Field),字段分两种,一种属于某类的各个实例或对象,一类从属于某一类本身,前者称为实例变量后者是类变量。

对象还可以使用属于类的函数来实现某些功能,这种函数叫做类的方法
字段和方法通称类的属性。

类与对象的方法部分(功能部分)

self
类方法与普通函数只有一种特定的区别:前者必须要一个额外的名字,这名字必须添加到参数列表的开头。但不用再调用这个功能是为这个参数赋值,Python会为它提供。这种特定的变量引用是对象本身。

假设有一个MyClass的类,这个类下有一个实例myobject。当你调用一个这个对象的方法,如myobject.method(arg1,arg2)时,Python将会自动将其转换成MyClass.method(myobject,arg1,arg2)
Python中self相当于c++中的指针以及java与c#中的this指针。
方法:

\_init_方法:

会在类的对象被实例化时立即运行。这一方法可以对任何你想进行操作的目标对象进行初始化操作。得牢记的是:在init前后加上双划线。一般而言,我们不会显示地调用init方法。这正是这个方法的特殊之处所在。

类与对象的数据部分(字段部分):

字段有两种类型:类变量与对象变量。根据究竟是类还是对象拥有这些变量进行分类。

类变量是共享的,可以被属于该类的所有实例访问。由于类变量只有一个副本,当任何一个对象对类变量做出改变时,发生的变动将在其他所有实例中都会得到体现。

对象变量:由类的每一个独享的对象或实例所拥有。这种情况下,每个对象都拥有属于它自己的字段的副本。不能被共享,也不会以任何的方式与其他不同实例中的相同名称字段产生关联。

得注意:当一个对象变量与一个类变量名称相同时,类变量将会被隐藏

假设Robot是一个类,popluation是一个类变量,我们可以使用Robot.popluation来引用这个变量。也可以使用self.__class__.population来引用,因为每个对象都通过self.__class__属性来引用它的类。

可以使用装饰器来将方法标记为类方法。譬如:
@classmethod
def how_many(cls):
等价于调用
how_many = classmethod(how_many)

self来引用同一对象的变量和方法。被称作是属性引用。

所有的类成员都是公开的,但如果你使用数据成员并在起名字使用双下划线做前缀,诸如__privatevar这样的形式,则python会使用名称调整来实其有效地称为一个私有变量。

所有类成员(包括数据成员)都是公开的,且python中所有的方法都是虚拟的。

继承:
基类(Base class)或是超类(Superclass) 派生类(Derived Class)或子类(Subclass)
基类中做出的改动都会影响其子类的改动。
某一派生类做出的改动并不会影响其他子类。
有一点要牢记的是:在子类中定义初始化方法,Python不会自动调用基类中的构造函数(初始化方法),所以必须在子类中的初始化方法中显示地调用该方法。相反,如果子类中没有定义初始化方法,则Python会自动调用基类的构造函数。
理解这一问题的思路是:

Python总会从当前的实际类型中开始寻找方法,如果找不到就会在该类所属的基本类中依顺序逐个寻找属于基本类的方法。这个基本类是在定义子类时后跟的元组指定的。

如果继承元组中有超过一个类,这种情况就会被称作多重继承(Multiple Inheritance)

原创粉丝点击