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小程序来统计测试脚本的关键字
Mar 12 Python
Python 中的with关键字使用详解
Sep 11 Python
关于Python 3中print函数的换行详解
Aug 08 Python
python实现ID3决策树算法
Dec 20 Python
python基础教程项目二之画幅好画
Apr 02 Python
详解django.contirb.auth-认证
Jul 16 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
Aug 10 Python
python中dir()与__dict__属性的区别浅析
Dec 10 Python
详解PyCharm安装MicroPython插件的教程
Jun 24 Python
Django REST framework 单元测试实例解析
Nov 07 Python
如何使用python3获取当前路径及os.path.dirname的使用
Dec 13 Python
三步解决python PermissionError: [WinError 5]拒绝访问的情况
Apr 22 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
使用VisualStudio开发php的图文设置方法
2010/08/21 PHP
linux环境apache多端口配置虚拟主机的方法深入介绍
2013/06/09 PHP
如何阻止网站被恶意反向代理访问(防网站镜像)
2014/03/18 PHP
PHP获取mysql数据表的字段名称和详细信息的方法
2014/09/27 PHP
thinkPHP自定义类实现方法详解
2016/11/30 PHP
PHP基于SPL实现的迭代器模式示例
2018/04/22 PHP
Extjs列表详细信息窗口新建后自动加载解决方法
2010/04/02 Javascript
js面向对象编程之如何实现方法重载
2014/07/02 Javascript
JS实现在网页中弹出一个输入框的方法
2015/03/03 Javascript
简单实现js页面切换功能
2021/01/10 Javascript
JS定时器实现数值从0到10来回变化
2016/12/09 Javascript
Thinkjs3新手入门之添加一个新的页面
2017/12/06 Javascript
Vue作用域插槽slot-scope实例代码
2018/09/05 Javascript
详解JavaScript中操作符和表达式
2018/09/12 Javascript
微信小程序非swiper组件实现的自定义伪3D轮播图效果示例
2018/12/11 Javascript
angular4自定义组件非input元素实现ngModel双向数据绑定的方法
2018/12/28 Javascript
Vue 实现分页与输入框关键字筛选功能
2020/01/02 Javascript
vue实现数据控制视图的原理解析
2020/01/07 Javascript
Python cookbook(数据结构与算法)字典相关计算问题示例
2018/02/18 Python
Python opencv实现人眼/人脸识别以及实时打码处理
2019/04/29 Python
Python中的 is 和 == 以及字符串驻留机制详解
2019/06/28 Python
python 批量添加的button 使用同一点击事件的方法
2019/07/17 Python
Macbook安装Python最新版本、GUI开发环境、图像处理、视频处理环境详解
2020/02/17 Python
python实现马丁策略的实例详解
2021/01/15 Python
来自Ocado的宠物商店:Fetch
2018/07/10 全球购物
Annoushka英国官网:英国奢侈珠宝品牌
2018/10/20 全球购物
审计班子对照检查材料
2014/08/27 职场文书
政府个人对照检查材料思想汇报
2014/10/08 职场文书
机关干部四风问题自我剖析及整改措施
2014/10/26 职场文书
平安家庭事迹材料
2014/12/20 职场文书
人生遥控器观后感
2015/06/11 职场文书
机械生产实习心得体会
2016/01/22 职场文书
68句权威创业名言
2019/08/26 职场文书
Spring Data JPA使用JPQL与原生SQL进行查询的操作
2021/06/15 Java/Android
Python IO文件管理的具体使用
2022/03/20 Python
提高系统的吞吐量解决数据库重复写入问题
2022/04/23 MySQL