首页 > 代码库 > python基础-4
python基础-4
python面向对象
创建类:
使用class语句来创建一个新类,class之后为类的名称并以冒号结尾,如下实例:
class ClassName: ‘Optional class documentation string‘#类文档字符串 class_suite #类体
类的帮助信息可以通过ClassName.__doc__查看。
类变量在类的所有实例之间共享,通过类名来访问类变量
python内置类属性:
__dict__ : 类的属性(包含一个字典,由类的数据属性组成)
__doc__ :类的文档字符串
__name__: 类名
__module__: 类定义所在的模块(类的全名是‘__main__.className‘,如果类位于一个导入模块mymod中,那么className.__module__ 等于 mymod)
__bases__ : 类的所有父类构成元素(包含了以个由所有父类组成的元组)
类变量紧接在类名后面定义,相当于java和c++的static变量
实例变量在__init__里定义,相当于java和c++的普通变量
>>> class test: count = 0; def __init__(self, c): self.count = c; self.__class__.count = self.__class__.count + 1; >>> a = test(3)>>> a.count3>>> test.count1>>> b = test(-1)>>> b.count-1>>> test.count2>>>
python对象销毁(垃圾回收):引用计数
class Point: def __init( self, x=0, y=0): self.x = x self.y = y def __del__(self): class_name = self.__class__.__name__ print class_name, "destroyed"pt1 = Point()pt2 = pt1pt3 = pt1print id(pt1), id(pt2), id(pt3) # 打印对象的iddel pt1del pt2del pt3
以上实例运行结果如下:
3083401324 3083401324 3083401324Point destroyed
<style></style>
类的继承:
语法:
派生类的声明,与他们的父类类似,继承的基类列表跟在类名之后,如下所示:
class SubClassName (ParentClass1[, ParentClass2, ...]): ‘Optional class documentation string‘ class_suite
在python中继承中的一些特点:
1:在继承中基类的构造(__init__()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。
2:在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数
3:Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。
class Parent: # 定义父类 parentAttr = 100 def __init__(self): print "Calling parent constructor" def parentMethod(self): print ‘Calling parent method‘ def setAttr(self, attr): Parent.parentAttr = attr def getAttr(self): print "Parent attribute :", Parent.parentAttrclass Child(Parent): # define child class def __init__(self): print "Calling child constructor" def childMethod(self): print ‘Calling child method‘c = Child() # 实例化子类c.childMethod() # 调用子类的方法c.parentMethod() # 调用父类方法c.setAttr(200) # 再次调用父类的方法c.getAttr() # 再次调用父类的方法
<style></style>
方法重写:
如果你的父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法
运算符重载:
class 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)
<style></style>
在python中实现数据隐藏很简单,不需要在前面加什么关键字,只要把类变量名或成员函数前面加两个下划线即可实现数据隐藏的功能,这样,对于类的实例 来说,其变量名和成员函数是不能使用的,对于其类的继承类来说,也是隐藏的,这样,其继承类可以定义其一模一样的变量名或成员函数名,而不会引起命名冲 突。
Python不允许实例化的类访问隐藏数据,但你可以使用object._className__attrName访问属性
python基础-4