一、python面向对象简介
简介:Python从设计之初就已经是一门面向对象的语言,在Python中创建一个类和对象是很容易的。
-
面向对象技术简介
- 类(Class):用来描述具有相同的属性和方法的对象集合。它定义了该集合中每一个对象所共有的属性和方法。对象是类的实例,类是对象的抽象。
- 类变量:类变量在整个实例化的对象是公用的。
- 数据成员:类变量或者实例变量,用于处理类及实例对象的相关数据。
- 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个地方叫做方法的覆盖。也称之为方法的重写。
- 局部变量:定义在方法中的变量,只用于当前实例的类。
- 实例变量:在类的声明中,属性是用变量来表示的。
- 继承:即一个派生类(derived class) 继承基类(base class)的字段和方法。
- 实例化:创建一个类的实例,类的具体对象。
- 方法:类中定义的函数。
- 对象:通过类定义的数据结构和实例。
-
创建类
使用class语句创建一个新类,class之后为类名并以冒号结尾。
class 类名:
方法
变量=类名()
-
self代表类的实例,而非类
类的方法与普通的函数只有一个特别的区别→它们必须有一个额外的第一个参数名称,按照惯例它的名称是self。
self代表是类的实例,代表当前对象的地址,而self.class则指向类。
-
创建实例对象
在其他语言中实例化类关键字new,在python中并没有关键字,类的实例化类似函数调用的方式。
-
访问属性
可以使用点号,来访问对象的属性。
可以作为添加,修改或删除使用
- getattr(obj,name,default):访问对象的属性
- hasattr(obj,name):检查是否存在一个属性
- setattr(obj,name,value):设置一个属性。如果属性不存在,会创建一个新的属性
- delattr(obj,name):删除属性
-
Python内置函数
- dict:类的属性(包含一个字典,由类的数据属性组成)
- doc:类的文档字符串
- name:类名
- module:类定义所在的模块,如果类位于一个导入模块mymod中,那么classNname.module等于mymod。
- bases:类的所有父类构成元素(包含了一个由所有父类组成的元素)
-
python对象销毁(垃圾回收)
python使用了引用计数着一简单技术来跟踪和回收垃圾。
在python内部记录着所有使用中的对象各有多少个引用。
一个内部跟踪变量,称为一个引用数据。
垃圾回收机制不仅针对引用计数为0的对象,同样也可以处理循环引用的情况。
-
类的继承
面向对象的编程带来的最主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。
通过继承创建的新类称为子类或派生类,被继承的类称为基类、父类或超类。
继承语法:
class 派生类名(基类名)
- 如果再子类中需要父类的构造方法需要显示的调用父类的构造方法,或者不重写父类的构造方法,
- 在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量,
- python总是首先查找对应类型的方法,如果它不能派生类中找到对应的方法,它才开始到基类中逐个查找。
如果在继承元祖中列了一个以上的类,那么它就被称作‘多重继承’。
- issubclass():布尔函数判断一个类是另一个类的子类或者子孙类
- isinstance(obj,Class):布尔函数如果obj是Class类的实例对象或者是一个Class子类的实例对象,则返回True
-
方法重写
如果你的父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法。
-
基础重载方法
- init(self)→构造函数简单的调用方法:obj=className(args)
- del(self)→析构方法,删除一个对象,简单的调用方法:del obj
- repr(self)→转化为供解释器读取的形式:repr(obj)
- str(self)→用于将值转化为适合于人阅读的形式,简单的调用方法:str(obj)
- cmp(self,x)→对象比较,简单的调用方法:cmp(obj.x)
-
运算符重载
python支持运算符重载
-
类属性与方法
-
类的私有属性
__private_attrs:两个下划线开头,生命该属性私有,不能再类的外部被使用或者直接访问。在类内部的方法中使用self. _private_attrs。
-
类的方法
在类的内部,使用def关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数。
-
累的私有方法
__private_method:两个下划线开头,声明该方法为私有方法,不能在类的外部调用。在类的内部调用self. _ _private_methods。
-
-
单下划线、双下划线、头尾下划线说明
- foo:定义的是特殊方法,一般系统定义名字,类似init()之类的。
- _foo:以单下划线开头的表示的是protected类型的变量,即保护类型只能允许其本身与子类进行访问。
- __foo:双下划线的表示是私有类型(private)的变量,只能是允许这个类本身进行访问。