Python学习之面向对象(class)
来源:互联网 发布:linux防火墙配置 编辑:程序博客网 时间:2024/06/08 06:39
创建类
使用class语句来创建一个新类,class之后为类的名称并以冒号结尾,如下实例:
class ClassName: '类的帮助信息' #类文档字符串 class_suite #类体
self代表类的实例,而非类
类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。
创建实例对象
实例化类其他编程语言中一般用关键字 new,但是在 Python 中并没有这个关键字,类的实例化类似函数调用方式。
以下使用类的名称 Employee 来实例化,并通过 __init__ 方法接受参数。
"创建 Employee 类的第一个对象"emp1 = Employee("Zara", 2000)"创建 Employee 类的第二个对象"emp2 = Employee("Manni", 5000)
访问属性
您可以使用点(.)来访问对象的属性。使用如下类的名称访问类变量:
emp1.displayEmployee()emp2.displayEmployee()print "Total Employee %d" % Employee.empCount
Python内置类属性
● __dict__ : 类的属性(包含一个字典,由类的数据属性组成)● __doc__ :类的文档字符串● __name__: 类名● __module__: 类定义所在的模块(类的全名是'__main__.className',如果类位于一个导入模块mymod中,那么className.__module__ 等于 mymod)● __bases__ : 类的所有父类构成元素(包含了一个由所有父类组成的元组)
类的继承
面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。继承完全可以理解成类之间的类型和子类型关系。
需要注意的地方:继承语法 class 派生类名(基类名)://... 基类名写在括号里,基本类是在类定义的时候,在元组之中指明的。
在python中继承中的一些特点:
1:在继承中基类的构造(__init__()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。2:在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数3:Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。如果在继承元组中列了一个以上的类,那么它就被称作"多重继承" 。
如果在继承元组中列了一个以上的类,那么它就被称作"多重继承" 。
语法:
派生类的声明,与他们的父类类似,继承的基类列表跟在类名之后,如下所示:
class SubClassName (ParentClass1[, ParentClass2, ...]): 'Optional class documentation string' class_suite
你可以使用issubclass()或者isinstance()方法来检测。
- issubclass() - 布尔函数判断一个类是另一个类的子类或者子孙类,语法:issubclass(sub,sup)
- isinstance(obj, Class) 布尔函数如果obj是Class类的实例对象或者是一个Class子类的实例对象则返回true。
方法重写
如果你的父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法:
基础重载方法
下表列出了一些通用的功能,你可以在自己的类重写:
构造函数
简单的调用方法: obj = className(args)2__del__( self )
析构方法, 删除一个对象
简单的调用方法 : del obj3__repr__( self )
转化为供解释器读取的形式
简单的调用方法 : repr(obj)4__str__( self )
用于将值转化为适于人阅读的形式
简单的调用方法 : str(obj)5__cmp__ ( self, x )
对象比较
简单的调用方法 : cmp(obj, x)
运算符重载
Python同样支持运算符重载,实例如下:
#!/usr/bin/pythonclass Vector: def __init__(self, a, b): self.a = a self.b = b def __str__(self): return 'Vector (%d, %d)' % (self.a, self.b) def __add__(self,other): return Vector(self.a + other.a, self.b + other.b)v1 = Vector(2,10)v2 = Vector(5,-2)print v1 + v2以上代码执行结果如下所示:Vector(7,8)
类属性与方法
类的私有属性
__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs。
类的方法
在类的内部,使用 def 关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数
类的私有方法
__private_method:两个下划线开头,声明该方法为私有方法,不能在类地外部调用。在类的内部调用 self.__private_methods
单下划线、双下划线、头尾双下划线说明:
- __foo__: 定义的是特列方法,类似 __init__() 之类的。
- _foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *
- __foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。
阅读全文
0 0
- Python学习之面向对象(class)
- Python的面向对象之class初览
- 【Python】面向对象class
- python学习之--面向对象
- Python学习之面向对象
- Python的面向对象之class二看
- python学习笔记(三)之面向对象编程
- Python之学习笔记(面向对象编程)
- Python学习日志(六)之面向对象编程
- Python学习笔记之面向对象
- 【python学习】之四、面向对象
- python语法学习面向对象之继承
- python语法学习面向对象之继承
- Python学习之路四---面向对象
- [学习笔记]python之面向对象编程
- Python学习之面向对象编程
- python学习:面向对象
- Python面向对象学习
- 被一个丢失的对象搞蠢了
- (四)Java设计模式之抽象工厂模式
- Android 教你一步步搭建MVP+Retrofit+RxJava网络请求框架
- 浅谈String的intern()方法
- 详解Android中Handler的使用方法
- Python学习之面向对象(class)
- 三星专业级360度视频拍摄设备登场,能直接传输3D VR视频
- Bootstrap与EasyUI入门
- oracle关联查询语句整理
- 红黑树总结
- print、println、printf的区别
- IDEA PermGen space内存溢出
- C++之树的层序遍历和深度优先遍历(先序遍历)(14)---《那些奇怪的算法》
- IO 流