python初步学习-面向对象之 类(二)
方法重写
如果你的父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法:
#!/usr/bin/env python
#coding:utf8
class Parent:
def myMethod(self):
print '调用父类方法'
class Child(Parent):
def myMethod(self):
print '调用子类方法'
c = Child()
c.myMethod()
执行以上代码输出结果如下:
调用子类方法
下表列出了一些通用的功能,你可以在自己的类中重写:
序号 | 方法,描述&简单的调用 |
---|---|
1 | __init__(self[,args...]) :构造函数,简单的调用方法:obj = className(args) |
2 | __del__(self) :删除一个对象,简单的调用方法:del obj |
3 | __repr__(self) :转化为供解释器读取的形式,简单的调用方法:repr(obj) |
4 | __str__(self) :用于将值转化为适用于人阅读的形式 |
5 | __cmp__(self,x) :对象比较,简单的调用方法:cmp(obj,x) |
运算符重写
python
同样支持运算符重写,示例如下
#!/usr/bin/python
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)
类属性与方法
类的私有属性
__private_attrs
:两个下划线开头,声明该属性为私有,不能在类的外部被使用或者直接访问,在类内部使用self.__private_attrs
类的方法
在类的内部,使用def
关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数self
,且为第一个参数
类的私有方法
__private_method
:两个下划线开头,声明该方法为私有方法,不能在类的外部调用。在类的内部调用self.__private_methods
实例:
#!/usr/bin/env python
#coding:utf8
class JustCounter:
__secretCount = 0 #私有变量
publicCount = 0 #公共变量
def count(self):
self.__secretCount += 1
self.publicCount += 1
print self.__secretCount
counter = JustCounter()
counter.count()
counter.count()
print counter.publicCount
print counter.__secretCount #报错,实例不能访问私有变量
python
不允许实例化的类访问私有数据,但你可以使用object.__className__attrName访问属性,将如下代码替换以上代码的最后一行代码
print counter._JustCounter__secretCount
执行以上代码,执行结果如下:
1
2
3
4
单下划线、双下划线、头尾双下划线说明:
__foo__
:定义的是特殊方法,一般是系统定义名字,类似__init__()
_foo
:以单下划线开头的表示是protected
类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于from module import *
这种导入方式__foo
:双下划线的表示的是私有类型(private)的变量,只能是允许这个类本身进行访问了。