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与shell的3种交互方式介绍
Apr 11 Python
Hadoop中的Python框架的使用指南
Apr 22 Python
Python实现登录人人网并抓取新鲜事的方法
May 11 Python
恢复百度云盘本地误删的文件脚本(简单方法)
Oct 21 Python
每天迁移MySQL历史数据到历史库Python脚本
Apr 13 Python
python获取文件真实链接的方法,针对于302返回码
May 14 Python
Python查找第n个子串的技巧分享
Jun 27 Python
使用jupyter notebook直接打开.md格式的文件
Apr 10 Python
python实现将中文日期转换为数字日期
Jul 14 Python
Python Charles抓包配置实现流程图解
Sep 29 Python
关于python中导入文件到list的问题
Oct 31 Python
matplotlib相关系统目录获取方式小结
Feb 03 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
php统计时间和内存使用情况示例分享
2014/03/13 PHP
菜单效果
2006/10/14 Javascript
日期处理的js库(迷你版)--自建js库总结
2011/11/21 Javascript
JS前端框架关于重构的失败经验分享
2013/03/17 Javascript
jQuery中fadeIn、fadeOut、fadeTo的使用方法(图片显示与隐藏)
2013/05/08 Javascript
js锁屏解屏通过对$.ajax进行封装实现
2014/07/31 Javascript
JS+CSS实现带关闭按钮DIV弹出窗口的方法
2015/02/27 Javascript
javascript数组排序汇总
2015/07/07 Javascript
Node.js与Sails ~项目结构与Mvc实现及日志机制
2015/10/14 Javascript
不用一句js代码初始化组件
2016/01/27 Javascript
Javascript中内建函数reduce的应用详解
2016/10/20 Javascript
Node.js常用工具之util模块
2017/03/09 Javascript
underscore之Chaining_动力节点Java学院整理
2017/07/10 Javascript
彻底弄懂 JavaScript 执行机制
2018/10/23 Javascript
在vue中通过render函数给子组件设置ref操作
2020/11/17 Vue.js
使用Python的web.py框架实现类似Django的ORM查询的教程
2015/05/02 Python
Python中使用bidict模块双向字典结构的奇技淫巧
2016/07/12 Python
Python+Turtle动态绘制一棵树实例分享
2018/01/16 Python
使用pycharm生成代码模板的实例
2018/05/23 Python
Python正则表达式和re库知识点总结
2019/02/11 Python
Python使用Pickle模块进行数据保存和读取的讲解
2019/04/09 Python
windows上安装python3教程以及环境变量配置详解
2019/07/18 Python
python实现多线程端口扫描
2019/08/31 Python
python获取栅格点和面值的实现
2020/03/10 Python
Python smtp邮件发送模块用法教程
2020/06/15 Python
Python装饰器如何实现修复过程解析
2020/09/05 Python
内部类的定义、种类以及优点
2013/10/16 面试题
简历的个人自我评价范文
2014/01/03 职场文书
家长给幼儿园的表扬信
2014/01/09 职场文书
2014年小学生迎国庆65周年演讲稿
2014/09/27 职场文书
尊师重教主题班会
2015/08/14 职场文书
周一给客户的问候语
2015/11/10 职场文书
小学新课改心得体会
2016/01/22 职场文书
pytorch查看网络参数显存占用量等操作
2021/05/12 Python
Go语言实现Snowflake雪花算法
2021/06/08 Golang
CSS基础详解
2021/10/16 HTML / CSS