Python类的基础入门知识


Posted in Python onNovember 24, 2008
class Account(object): 
"一个简单的类" 
account_type="Basic" 
def __init__(self,name,balance): 
"初始化一个新的Account实例" 
self.name=name 
self.balance=balance 
def deposit(self,amt): 
"存款" 
self.balance=self.balance+amt 
def withdraw(self,amt): 
"取款" 
self.balance=self.balance-amt 
def inquiry(self): 
"返回当前余额" 
return self.balance

其中,__init__函数就是Python中的构造函数。另外,balance这个变量是类实例的变量。
另外,在python中类中定义成员函数一般第一个参数总是self,表示自已的实例,与C++中的this指针差不多,不过C++中的this指针是隐函于其中并全局可见的,而在Python中却要作为参数传进去, 这是Python中定义类的另一个特点。
还有一个特点,在类的成员函数中,使用类中的另一个成员函数,前面必须要指定类名,如下:
class Foo(object): 
def bar(self): 
print "bar!" 
def spam(self): 
bar(self) # 错误,引发NameError, 可以是:self.bar 
Foo.bar(self) # 合法的

2.在类中声时静态方法并使用静态方法
要在类中使用静态方法,需在类成员函数前面加上@staticmethod标记符,以表示下面的成员函数是静态函数。使用静态方法的好处是,不需要定义实例即可使用这个方法:另外,多个实例共享此静态方法,如下: 
class SimClass(): 
@staticmethod 
def ShareStr(): 
print "This is a static Method" 
SimClass.ShareStr() #使用静态函数

3.类方法:
类方法与普通的成员函数和静态函数有不同之处,在接触的语言中好像也没见过这种语义,看它的定义:
一个类方法就可以通过类或它的实例来调用的方法, 不管你是用类来调用这个方法还是类实例调用这个方法,该方法的第一个参数总是定义该方法的类对象。
记住:方法的第一个参数都是类对象而不是实例对象.
按照惯例,类方法的第一个形参被命名为 cls. 任何时候定义类方法都不是必须的(类方法能实现的功能都可以通过定义一个普通函数来实现,只要这个函数接受一个类对象做为参数就可以了).
定义类方法并使用类方法:
class ABase(object): 
@classmethod #类方法修饰符 
def aclassmet(cls): print 'a class method for', cls.__name__ 
class ADeriv(ABase): pass 
bInstance = ABase( ) 
dInstance = ADeriv( ) 
ABase.aclassmet( ) # prints: a class method for ABase 
bInstance.aclassmet( ) # prints: a class method for ABase 
ADeriv.aclassmet( ) # prints: a class method for ADeriv 
dInstance.aclassmet( ) # prints: a class method for ADeriv

也就是说,类方法并不是必须的,使用普通函数也可以实现类方法的功能。
4.类的继承
在python中,继承一个类,就像这样:
class A(object) #继承object类
#.......
class B(A) #继承A类
#........
另外,python中支持多继承,对于多继承,找某个对应的函数,其python有相应的方法,如: 
class D(oject): pass #D继承自object 
class B(D): #B是D的子类 
varB = 42 
def method1(self): 
print "Class B : method1" 
class C(D): #C也是D的子类 
varC = 37 
def method1(self): 
print "Class C : method1" 
def method2(self): 
print "Class C : method2" 
class A(B,C): #A是B和C的子类 
varA = 3.3 
def method3(self): 
print "Class A : method3"

如果我要调用A.method1() ,会出现什么结果?答案是ClassB:method1. 书上是只样介绍的:
当搜索在基类中定义的某个属性时,Python采用深度优先的原则、按照子类定义中的基类顺序进行搜索。**注意**(new-style类已经改变了这种行为)。上边例子中,如果访问 A.varB ,就会按照A-B-D-C-D这个顺序进行搜索,只要找到就停止搜索.若有多个基类定义同一属性的情况,则只使用第一个被找到属性值:
5.数据隐藏
在python中实现数据隐藏很简单,不需要在前面加什么关键字,只要把类变量名或成员函数前面加两个下划线即可实现数据隐藏的功能,这样,对于类的实例来说,其变量名和成员函数是不能使用的,对于其类的继承类来说,也是隐藏的,这样,其继承类可以定义其一模一样的变量名或成员函数名,而不会引起命名冲突。
class A: 
def __init__(self): 
self.__X = 3 # self._A__X 
class B(A): 
def __init__(self): 
A.__init__(self) 
self.__X = 37 # self._B__X
Python 相关文章推荐
python类定义的讲解
Nov 01 Python
python批量修改文件名的实现代码
Sep 01 Python
Python中函数的参数定义和可变参数用法实例分析
Jun 04 Python
在Django中管理Users和Permissions以及Groups的方法
Jul 23 Python
Python 正则表达式入门(中级篇)
Dec 07 Python
Python中struct模块对字节流/二进制流的操作教程
Jan 21 Python
Python绑定方法与非绑定方法详解
Aug 18 Python
python 中的divmod数字处理函数浅析
Oct 17 Python
python 有效的括号的实现代码示例
Nov 11 Python
Python networkx包的实现
Feb 14 Python
Django+Django-Celery+Celery的整合实战
Jan 20 Python
解决IDEA翻译插件Translation报错更新TTK失败不能使用
Apr 24 Python
Python 连连看连接算法
Nov 22 #Python
python sqlobject(mysql)中文乱码解决方法
Nov 14 #Python
Python转码问题的解决方法
Oct 07 #Python
Python函数学习笔记
Oct 07 #Python
Python日期操作学习笔记
Oct 07 #Python
wxPython 入门教程
Oct 07 #Python
新手该如何学python怎么学好python?
Oct 07 #Python
You might like
一个程序下载的管理程序(一)
2006/10/09 PHP
CI框架在CLI下执行占用内存过大问题的解决方法
2014/06/17 PHP
教你如何使用PHP输出中文JSON字符串
2014/05/22 Javascript
jquery操作checkbox示例分享
2014/07/21 Javascript
JavaScript表单验证开发
2016/11/23 Javascript
Angular.JS判断复选框checkbox是否选中并实时显示
2016/11/30 Javascript
JavaScript实现简易的天数计算器实例【附demo源码下载】
2017/01/18 Javascript
vue 通过下拉框组件学习vue中的父子通讯
2017/12/19 Javascript
jquery应用实例分享_实现手风琴特效
2018/02/01 jQuery
vue刷新页面时去闪烁提升用户体验效果的实现方法
2018/12/10 Javascript
vue项目打包后请求地址错误/打包后跨域操作
2020/11/04 Javascript
[01:35]2014DOTA2西雅图邀请赛 专访狐狸妈青春献给刀塔
2014/07/08 DOTA
[02:15]2014DOTA2国际邀请赛 赛后退役选手回顾
2014/08/01 DOTA
老生常谈Python之装饰器、迭代器和生成器
2017/07/26 Python
Python3之文件读写操作的实例讲解
2018/01/23 Python
python微信公众号开发简单流程
2018/03/23 Python
python随机取list中的元素方法
2018/04/08 Python
编写多线程Python服务器 最适合基础
2018/09/14 Python
Python中时间datetime的处理与转换用法总结
2019/02/18 Python
linux查找当前python解释器的位置方法
2019/02/20 Python
Django中ORM外键和表的关系详解
2019/05/20 Python
简单了解python 生成器 列表推导式 生成器表达式
2019/08/22 Python
Python图像处理库PIL的ImageGrab模块介绍详解
2020/02/26 Python
python实现人脸签到系统
2020/04/13 Python
Pytorch转onnx、torchscript方式
2020/05/25 Python
python装饰器三种装饰模式的简单分析
2020/09/04 Python
西尔斯百货官网:Sears
2016/09/06 全球购物
新大陆软件面试题
2016/11/24 面试题
军训教官感言
2014/03/02 职场文书
护士毕业实习感言
2014/03/05 职场文书
竞聘书格式及范文
2014/03/31 职场文书
健康教育评估方案
2014/05/25 职场文书
2014年招商引资工作总结
2014/11/22 职场文书
教师业务学习材料
2014/12/16 职场文书
2015年世界无烟日活动总结
2015/02/10 职场文书
MySQL数据库查询之多表查询总结
2022/08/05 MySQL