python 面向对象学习总结

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

引言

提到面向对象,总是离不开几个重要的术语:多态(Polymorphism),继承(Inheritance)

和封装(Encapsulation)。Python也是一种支持OOP的动态语言,本文将简单阐述Python 对面向对象的支持。

在讨论Python的OOP之前,先看几个OOP术语的定义:

类:对具有相同数据和方法的一组对象的描述或定义。

对象:对象是一个类的实例。

实例(instance):一个对象的实例化实现。

标识(identity):每个对象的实例都需要一个可以唯一标识这个实例的标记。

实例属性(instance attribute):一个对象就是一组属性的集合。

实例方法(instance method):所有存取或者更新对象某个实例一条或者多条属性的函数的集合。

类属性(classattribute):属于一个类中所有对象的属性,不会只在某个实例上

发生变化

类方法(classmethod):那些无须特定的对性实例就能够工作的从属于类的函数。中的类与对象

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

class 类名:

类变量

def __init__(self,paramers):

def 函数(self,...)

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

举例:

class MyFirstTestClass:

classSpec="it is a test class"

def __init__(self,word):

print "say "+word

def hello(self,name):

print "hello "+name

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

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

class MethodTest():

count= 0

def addCount(self):

+=1

print "I am an instance method,my count is" + str, self

@staticmethod

defstaticMethodAdd():

+=1

print"I am a static methond,my count is"+str

@classmethod

defclassMethodAdd(cls):

+=1

print"I am a class method,my count is"+str,cls

a=MethodTest()

()

'''I am an instance method,my count is 1 < instanceat 0x011EC990>

'''

() ;#I am a static methond,my count is2

() ;#I am a static methond,my count is3

() ;#I am a class method,my count is4

() ;#I am a class method,my count is5

()

'''Traceback(most recent call last):

File"", line 1, in

()

TypeError:unbound method addCount() must be called with MethodTest instance asfirst argument (got nothing instead)

'''

从上面的例子来看,静态方法和类方法基本上区别不大,特别是有Java编程基础的人会

简单的认为静态方法和类方法就是一回事,可是在Python中事实是这样的吗看下面的例子:() ;#I am a class method,my count is5

class subMethodTest(MethodTest):

pass

b=subMethodTest()

() ;#I am a static methond,my count is6

() ;#I am a class method,my count is7

() ;#Iam a class method,my count is8

如果父类中定义有静态方法a(),在子类中没有覆盖该方法的话,()仍然指的是父类的a ()方法。而如果a()是类方法的情况下,()指向的是子类。@staticmethod只适用于不想定义全局函数的情况。

看看两者的具体定义:

@staticmethod function is nothing morethan a function defined inside a class. It is callable withoutinstantiating the class first. It’s definition is immutable viainheritance.

相关文档
最新文档