Python 面向对象编程(4)

class A: # 定义类 A ..... class B: # 定义类 B ..... class C(A, B): # 继承类 A 和 B .....

  你可以使用issubclass()或者isinstance()方法来检测。

issubclass() - 布尔函数判断一个类是另一个类的子类或者子孙类,语法:issubclass(sub,sup)

isinstance(obj, Class) 布尔函数如果obj是Class类的实例对象或者是一个Class子类的实例对象则返回true。

方法重写

如果你的父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法:

实例:

#!/usr/bin/python # -*- coding: UTF-8 -*- 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 )
析构方法, 删除一个对象
简单的调用方法 : dell obj
 
3   __repr__( self )
转化为供解释器读取的形式
简单的调用方法 : repr(obj)
 
4   __str__( self )
用于将值转化为适于人阅读的形式
简单的调用方法 : str(obj)
 
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/python # -*- coding: UTF-8 -*- 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 通过改变名称来包含类名:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/e28fad4f44c7e82bc336ef001c15a957.html