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打开文件并获取文件相关属性的方法
Apr 23 Python
python简单的函数定义和用法实例
May 07 Python
在Python的Django框架中simple-todo工具的简单使用
May 30 Python
python中字符串变二维数组的实例讲解
Apr 03 Python
Python实现注册、登录小程序功能
Sep 21 Python
Python定义函数功能与用法实例详解
Apr 08 Python
Python3+Appium实现多台移动设备操作的方法
Jul 05 Python
Django stark组件使用及原理详解
Aug 22 Python
浅析PEP572: 海象运算符
Oct 15 Python
Python正则表达式高级使用方法汇总
Jun 18 Python
Tensorflow使用Anaconda、pycharm安装记录
Jul 29 Python
pycharm 的Structure界面设置操作
Feb 05 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
非洲第一个咖啡超凡杯大赛承办国—卢旺达的咖啡怎么样
2021/03/03 咖啡文化
PHP配置心得包含MYSQL5乱码解决
2006/11/20 PHP
PHP计算2点经纬度之间的距离代码
2013/08/12 PHP
php自定义的格式化时间示例代码
2013/12/05 PHP
php实现与erlang的二进制通讯实例解析
2014/07/23 PHP
php新浪微博登录接口用法实例
2014/12/23 PHP
php绘图之生成饼状图的方法
2015/01/24 PHP
PHP实现无限分类的实现方法
2016/11/14 PHP
php计算多个集合的笛卡尔积实例详解
2017/02/16 PHP
PHP实现的文件上传类与用法详解
2017/07/05 PHP
实例讲解PHP验证邮箱是否合格
2019/01/28 PHP
Jquery iframe内部出滚动条
2010/02/11 Javascript
根据表格中的某一列进行排序的javascript代码
2013/11/29 Javascript
javascript Deferred和递归次数限制实例
2014/10/21 Javascript
Javascript 严格模式use strict详解
2017/09/16 Javascript
Vue.js 2.x之组件的定义和注册图文详解
2018/06/19 Javascript
简单的抓取淘宝图片的Python爬虫
2014/12/25 Python
在Python中使用Mako模版库的简单教程
2015/04/08 Python
全面了解Python环境配置及项目建立
2016/06/30 Python
Python中int()函数的用法浅析
2017/10/17 Python
Python实现嵌套列表去重方法示例
2017/12/28 Python
django用户注册、登录、注销和用户扩展的示例
2018/03/19 Python
Pycharm设置界面全黑的方法
2018/05/23 Python
使用python的pandas库读取csv文件保存至mysql数据库
2018/08/20 Python
使用Python开发SQLite代理服务器的方法
2018/12/07 Python
Python @property及getter setter原理详解
2020/03/31 Python
使用keras实现孪生网络中的权值共享教程
2020/06/11 Python
在django中查询获取数据,get, filter,all(),values()操作
2020/08/09 Python
python 模拟登录B站的示例代码
2020/12/15 Python
Banana Republic欧盟:美国都市简约风格的代表品牌
2018/05/09 全球购物
中学生差生评语
2014/01/30 职场文书
贫困证明模板(3篇)
2014/09/16 职场文书
幼师个人总结范文
2015/02/28 职场文书
升职自荐书
2019/05/09 职场文书
历史名人教你十五个读书方法,赶快Get起来!
2019/07/18 职场文书
Java实战之课程信息管理系统的实现
2022/04/01 Java/Android