python 面向对象学习总结Word文件下载.docx

上传人:b****1 文档编号:15008681 上传时间:2022-10-26 格式:DOCX 页数:19 大小:24.20KB
下载 相关 举报
python 面向对象学习总结Word文件下载.docx_第1页
第1页 / 共19页
python 面向对象学习总结Word文件下载.docx_第2页
第2页 / 共19页
python 面向对象学习总结Word文件下载.docx_第3页
第3页 / 共19页
python 面向对象学习总结Word文件下载.docx_第4页
第4页 / 共19页
python 面向对象学习总结Word文件下载.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

python 面向对象学习总结Word文件下载.docx

《python 面向对象学习总结Word文件下载.docx》由会员分享,可在线阅读,更多相关《python 面向对象学习总结Word文件下载.docx(19页珍藏版)》请在冰豆网上搜索。

python 面向对象学习总结Word文件下载.docx

类属性(classattribute):

属于一个类中所有对象的属性,不会只在某个实例上发生变化

类方法(classmethod):

那些无须特定的对性实例就能够工作的从属于类的函数。

中的类与对象

Python中定义类的方式比较简单:

class 

类名:

类变量

def__init__(self,paramers):

def 

函数(self,...)

其中直接定义在类体中的变量叫类变量,而在类的方法中定义的变量叫实例变量。

类的属性包括成员变量和方法,其中方法的定义和普通函数的定义非常类似,但方法必须以self作为第一个参数。

举例:

classMyFirstTestClass:

classSpec="

itisatestclass"

def__init__(self,word):

print"

say"

+word

defhello(self,name):

hello"

+name

在Python类中定义的方法通常有三种:

实例方法,类方法以及静态方法。

这三者之间的区别是实例方法一般都以self作为第一个参数,必须和具体的对象实例进行绑定才能访问,而类方法以cls作为第一个参数,cls表示类本身,定义时使用@classmethod;

而静态方法不需要默认的任何参数,跟一般的普通函数类似.定义的时候使用@staticmethod。

classMethodTest():

count=0

defaddCount(self):

+=1

print"

Iamaninstancemethod,mycountis"

+str,self

@staticmethod

defstaticMethodAdd():

print"

Iamastaticmethond,mycountis"

+str

@classmethod

defclassMethodAdd(cls):

Iamaclassmethod,mycountis"

+str,cls

a=MethodTest()

()

'

Iamaninstancemethod,mycountis1<

instanceat0x011EC990>

();

#Iamastaticmethond,mycountis2

#Iamastaticmethond,mycountis3

#Iamaclassmethod,mycountis4

#Iamaclassmethod,mycountis5

Traceback(mostrecentcalllast):

File"

<

pyshell#5>

"

line1,in<

module>

TypeError:

unboundmethodaddCount()mustbecalledwithMethodTestinstanceasfirstargument(gotnothinginstead)

从上面的例子来看,静态方法和类方法基本上区别不大,特别是有Java编程基础的人会简单的认为静态方法和类方法就是一回事,可是在Python中事实是这样的吗看下面的例子:

classsubMethodTest(MethodTest):

pass

b=subMethodTest()

#Iamastaticmethond,mycountis6

#Iamaclassmethod,mycountis7

#Iamaclassmethod,mycountis8

如果父类中定义有静态方法a(),在子类中没有覆盖该方法的话,()仍然指的是父类的a()方法。

而如果a()是类方法的情况下,()指向的是子类。

@staticmethod只适用于不想定义全局函数的情况。

看看两者的具体定义:

@staticmethodfunctionisnothingmorethanafunctiondefinedinsideaclass.Itiscallablewithoutinstantiatingtheclassfirst.It’sdefinitionisimmutableviainheritance.

@classmethodfunctionalsocallablewithoutinstantiatingtheclass,butitsdefinitionfollowsSubclass,notParentclass,viainheritance.That’sbecausethefirstargumentfor@classmethodfunctionmustalwaysbecls(class).

封装和访问控制

与Java不同,Python的访问控制相对简单,没有public,private,protected等属性,python认为用户在访问对象的属性的时候是明确自己在做什么的,因此认为私有数据不是必须的,但是如果你必须实现数据隐藏,也是可以的,具体方法就是在变量名前加双下划线。

如__privatedata=0,定义私有方法则是在方法名称前加上__下划线。

但即使对于隐藏的数据,也是有一定的方法可以访问的。

方法就是__className__attrName。

Python对于私有变量会进行Namemangling是Python中为了方便定义私有的变量和方法,防止和继承类以及其他外部的变量或者方法冲突而采取的一种机制。

在python中通过__spam定义的私有变量为最终被翻译成_classname__spam,其中classname为类名,当类名是以_开头的时候则不会发生Namemangling。

Namemangling 

存在的一个问题是当字符串长度超过255的时候则会发生截断。

classPrivateTest:

__myownedata=12

def__myownmethod(self):

print"

canyouseeme"

defsayhi(self):

sayhi"

classsubPrivateTest(PrivateTest):

AttributeError:

classsubPrivateTesthasnoattribute'

__myownedata'

构造函数和析构函数

Python的构造函数有两种,__init__和__new__,__init__的调用不会返回任何值,在继承关系中,为了保证父类实例正确的初始化,最好显示的调用父类的__init__方法。

与__init__不同,__new__实际是个类方法,以cls作为第一个参数。

如果类中同时定义了__init__和__new__方法,则在创建对象的时候会优先使用__new__.

classA(object):

def__init__(self):

print("

ininit"

def__new__(self):

innew"

A()

如果__new__需要返回对象,则会默认调用__init__方法。

利用new创建一个类的对象的最常用的方法为:

super(currentclass,cls).__new__(cls[,...])

def__new__(cls):

Object=super(A,cls).__new__(cls)

inNew"

returnObject

classB(A):

inB'

sinit"

B()

__new__构造函数会可变类的定制的时候非常有用,后面的小节中会体现。

Python由于具有垃圾回收机制,通常不需要用户显示的去调用析构函数,即使调用,实例也不会立即释放,而是到该实例对象所有的引用都被清除掉后才会执行。

classP:

def__del__(self):

deleted"

classS(P):

print'

initialized'

(self)

childdeleted"

a=S()#initialized

b=a

c=a

id(a),id(b),id(c)#(,,)

dela

delb

delc#deleted#childdeleted

绑定与非绑定

在前面的例子中我们讨论过类的实例方法必须通过实例调用,如果直接通过类去访问会抛出异常,这种通过实例来访问方法就叫绑定,调用的时候不需要显示传入self参数,而调用非绑定方法需要显示传入self参数,比如当子类继承父类定义构造函数的时候,需要显示调用父类的构造函数,但此时该方法并未与任何实例绑定,调用的时候需要使用(self)。

静态方法可以直接被类或类实例调用。

它没有常规方法那样的特殊行为(绑定、非绑定、默认的第一个参数规则等等)。

完全可以将静态方法当成一个用属性引用方式调用的普通函数来看待。

任何时候定义静态方法都不是必须的(静态方法能实现的功能都可以通过定义一个普通函数来实现)

3.Python中的继承

继承

Python同时支持单继承与多继承,继承的基本语法为class新类名(父类1,父类2,..),当只有一个父类时为单继承,当存在多个父类时为多继承。

子类会继承父类的所有的属性和方法,子类也可以覆盖父类同名的变量和方法。

在传统类中,如果子类和父类中同名的方法或者属性,在查找的时候基本遵循自左到右,深度优先的原则。

如下列:

>

classA:

defsayhi(self):

print'

IamAhi'

classB:

IamBHi'

classC(A,B):

pass

d=C()

IamAhi

(d)

IamBHi

如果想调用

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 计算机硬件及网络

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1