python 类

来源:互联网 发布:清理arp 命令 centos 编辑:程序博客网 时间:2024/06/16 08:15

我的理解:
和C++的类类似

__双下划线开头的表示私有属性,调用的时候必须用self.xx调用
比如:
__str 表示私有数据成员
def __myprint(self): 定义私有成员函数

把私有的数据成员和私有的成员函数叫类的属性 和 类的成员函数,因为他们只能在类内部使用
dict是python内置的类属性,是字典类型,专门存放类属性的数据成员

不加__双下划线的数据成员和成员函数,就是普通的成员,可以通过对象点访问,也可以通过类名点访问(通过类访问有点像c++中的静态数据成员,通过::访问)

类内函数定义,第一个参数必须是self,就像this指针一样,this不用写出来,但是self需要显示写出来。
init(self) 是构造函数,也必须显示写self

get和set属性的方法:
getattr(obj, name[, default]) : 访问对象的属性。
hasattr(obj,name) : 检查是否存在一个属性。
setattr(obj,name,value) : 设置一个属性。如果属性不存在,会创建一个新属性。
delattr(obj, name) : 删除属性。
比如:
hasattr(emp1, ‘age’) # 如果存在 ‘age’ 属性返回 True。
getattr(emp1, ‘age’) # 返回 ‘age’ 属性的值
setattr(emp1, ‘age’, 8) # 添加属性 ‘age’ 值为 8
delattr(empl, ‘age’) # 删除属性 ‘age’

类的专有方法:
init() 构造函数,在生成对象时调用
del() 析构函数,释放对象时使用
repr() 打印,转换
setitem()按照索引赋值
getitem()按照索引获取值
len()获得长度
cmp()比较运算
call()函数调用

add()加运算
sub()减运算
mul()乘运算
div()除运算
mod()求余运算
pow()乘方

类的专有属性:
dict :类的属性(包含一个字典,由类的数据属性组成)
doc :类的文档字符串
name: 类名,1. 如果模块是被导入,name的值为模块名字
2. 如果模块是被直接执行,name的值为’main
class:类名
module: 类定义所在的模块(类的全名是’main.className’,如果类位于一个导入模块mymod中,那么className.module 等于 mymod)
bases : 类的所有父类构成元素(包含了以个由所有父类组成的元组)

自己理解:
自己定义的私有数据成员就用self.访问,类内置的专有属性就用类名访问。

——分割线——————————————————————————————
python对象销毁机制(垃圾回收机制)
参考:http://www.runoob.com/python/python-object.html python对象销毁

a = 40 就是<40>这个对象在内存中创建,a只是这个对象的引用
b = a 增加了一个引用

del a
del b 删除了引用,但是对象<40>还在,适当的时候python会回收这个对象

——分割线——————————————————————————————
类的继承:
类继承,基类写在元组中,跟在子类后面。单继承和多继承
比如:
class 派生类名(基类名):

在python中继承中的一些特点:
1:在继承中基类的构造(init()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。
如果子类没有自己的析构函数,子类自动调用父类的析构函数
2:在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数
3:Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。
4:重写父类方法

issubclass() - 布尔函数判断一个类是另一个类的子类或者子孙类,语法:issubclass(sub,sup)
isinstance(obj, Class) 布尔函数如果obj是Class类的实例对象或者是一个Class子类的实例对象则返回true。

——分割线——————————————————————————————
重载
1:可以重写基类的方法
2:下面的一些可以重写
init ( self [,args…] )
构造函数
简单的调用方法: obj = className(args)
del( self )
析构方法, 删除一个对象
简单的调用方法 : dell obj
repr( self )
转化为供解释器读取的形式
简单的调用方法 : repr(obj)
str( self )
用于将值转化为适于人阅读的形式
简单的调用方法 : str(obj)
cmp ( self, x )
对象比较
简单的调用方法 : cmp(obj, x)
以及一些运算符重载。
——分割线——————————————————————————————
异常
python标准异常参考:http://www.runoob.com/python/python-exceptions.html

Python的异常处理能力是很强大的,可向用户准确反馈出错信息。
在Python中,异常也是对象,可对它进行操作。
所有异常都是基类Exception的成员。
所有异常都从基类Exception继承,而且都在exceptions模块中定义。
Python自动将所有异常名称放在内建命名空间中,所以程序不必导入exceptions模块即可使用异常。
一旦引发而且没有捕捉SystemExit异常,程序执行就会终止。
如果交互式会话遇到一个未被捕捉的SystemExit异常,会话就会终止。

异常就是一种类
抛出异常是抛出异常对象
一个异常可以是一个字符串,类或者对象。 Python的内核提供的异常,大多数都是实例化的类,这是一个类的实例的参数。

用raise抛出异常,就是抛出一个异常对象
raise语法格式如下:
raise [Exception [, args [, traceback]]]
抛出异常后面的代码不再会被执行,就是raise后面的代码不会被执行
为了用except捕获异常,必须用相同的对象或者相同的字符串捕获

用户自定义异常
参考: http://www.runoob.com/python/python-exceptions.html

异常参考: http://www.cnblogs.com/dkblog/archive/2011/06/24/2089026.html

0 0
原创粉丝点击