1 实例方法

一个实例的私有属性就是以__开头的属性,无法被外部访问,那这些属性定义有什么用?虽然私有属性无法从外

部访问,但是,从类的内部是可以访问的。除了可以定义实例的属性外,还可以定义实例的方法。实例的方法就是在

类中定义的函数,它的第一个参数永远是 self,指向调用该方法的实例本身,其他参数和一个普通函数是完全一样

的:

class Person(object):

def __init__(self, name):

self.__name = name

def get_name(self):

return self.name

get_name(self) 就是一个实例方法,它的第一个参数是self。__init__(self, name)其实也可看做是一个特殊的

实例方法。调用实例方法必须在实例上调用:

>>> p1 = Person('Bob')

>>> print p1.get_name() #self不需要传入

Bob

在实例方法内部,可以访问所有实例属性,这样,如果外部需要访问私有属性,可以通过方法调用获得,这种数

据封装的形式除了能保护内部数据一致性外,还可以简化外部调用的难度。

2 types.MethodType()

因为方法也是一个属性,所以,它也可以动态地添加到实例上,只是需要用types.MethodType()把一个函数变

为一个方法:

import types

def fn_get_grade(self):

if self.score >= 80:

return 'A'

if self.score >= 60:

return 'B'

return 'C'

class Person(object):

def __init__(self, name, score):

self.name = name

self.score = score

下面我们将fn_get_grade()方法添加到实例上:

>>> p1 = Person('Bob', 90)

>>> p1.get_grade = types.MethodType(fn_get_grade, p1, Person)

>>> print p1.get_grade()

A

>>> p2 = Person('Alice', 65)

>>> print p2.get_grade()

# ERROR: AttributeError: 'Person' object has no attribute 'get_grade'

因p2实例没有绑定get_grade方法,所以出现错误。

3 定义类方法

和属性类似,方法也分实例方法和类方法。

在class中定义的全部是实例方法,实例方法第一个参数 self 是实例本身。定义类方法需要在方法前加上

@classmethod:

class Person(object):

count = 0

@classmethod

def how_many(cls):

return cls.count

def __init__(self, name):

self.name = name

Person.count = Person.count + 1

print Person.how_many()

p1 = Person('Bob')

print Person.how_many()

通过标记一个 @classmethod,该方法将绑定到 Person 类上,而非类的实例。类方法的第一个参数将传入类本

身,通常将参数名命名为 cls,上面的 cls.count 实际上相当于 Person.count。因为是在类上调用,而非实例上调

用,因此类方法无法获得任何实例变量,只能获得类的引用。

python 定义method_python进阶14:实例方法和类方法、types.MethodType()相关推荐

  1. python 类中方法总结 --- 实例方法、类方法、静态方法

    在python的类语法中,可以出现三种方法,具体如下: (1)实例方法 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例 ...

  2. Python基础学习——面向对象编程(第一讲:面向对象概述、面向对象三个基本特征(封装性、继承性、多态性)、类和对象(定义类、创建和使用对象、实例变量、类变量、构造方法、实例方法、类方法、静态方法))

    面向对象是Python最重要的特性,在Python中一切数据类型都是面向对象的. 1.面向对象概述 面向对象的编程思想是,按照真实世界客观事物的自然规律进行分析,客观世界中存在什么样的实体,构建软件系 ...

  3. Python 实例方法、类方法和静态方法

    在 Python 中,实例方法(instance method),类方法(class method)与静态方法(static method)经常容易混淆.本文通过代码例子来说明它们的区别. 实例方法 ...

  4. python类中方法调用自己类的方法_python 类中方法总结 --- 实例方法、类方法、静态方法...

    在python的类语法中,可以出现三种方法,具体如下: (1)实例方法 1)第一个参数必须是实例本身,一般使用[self]表示. 2)在实例方法中,可以通过[self]来操作实例属性,[类名]来操作类 ...

  5. python 类变量、实例变量、参数、实例方法、类方法、静态方法 的用法和区别

    #!/usr/bin/env python # -*- encoding: utf-8 -*- """ @Introduce : 类变量.实例变量.参数.实例方法.类方法 ...

  6. python 静态方法 类方法 的作用_Python实例方法、类方法、静态方法的区别与作用详解...

    本文实例讲述了Python实例方法.类方法.静态方法的区别与作用.分享给大家供大家参考,具体如下: Python中至少有三种比较常见的方法类型,即实例方法,类方法.静态方法.它们是如何定义的呢?如何调 ...

  7. python中实例方法分类_python方法的分类(实例方法、类方法、静态方法)

    方法和函数的区分 很多童鞋会比较疑惑,方法和函数有什么区别,都是通过def去定义的啊? 只需要记住一点,方法是用来描述一个目标的行为动作! 不论你是直接通过 类名.方法调用,还是通过由类生成的实例.方 ...

  8. python中类方法与实例方法的区别-Python实例方法、类方法、静态方法的区别与作用详解...

    本文实例讲述了Python实例方法.类方法.静态方法的区别与作用.分享给大家供大家参考,具体如下: Python中至少有三种比较常见的方法类型,即实例方法,类方法.静态方法.它们是如何定义的呢?如何调 ...

  9. python的用途实例-Python实例方法、类方法、静态方法的区别与作用详解

    本文实例讲述了Python实例方法.类方法.静态方法的区别与作用.分享给大家供大家参考,具体如下: Python中至少有三种比较常见的方法类型,即实例方法,类方法.静态方法.它们是如何定义的呢?如何调 ...

最新文章

  1. 基于Flutter+FaaS的业务框架思考与实践
  2. iOS推送兼容iOS7
  3. java if语句选择题_选择语句(if else) 习题(2017/12/1)
  4. sql join教程
  5. WebService 的创建,部署和使用
  6. Linux下php添加新扩展
  7. [BUUCTF-pwn]——inndy_rop
  8. ServletRequestAttributes用法详解——Spring系列学习笔记
  9. Python介绍与特点(自学python知识整理)
  10. 前端学习(2143):webpack的config.js配置和package.json
  11. IDEA06 代码规范检测插件之Alibaba Java Coding Guidelines
  12. iOS 14.5新功能:解锁iPhone更方便!
  13. Ex 6_23 一个生产系统共包含n个顺序执行的阶段..._第七次作业
  14. 当FORM的ENCTYPE=quot;multipart/form-dataquot; 时request.getParameter()获取不到
  15. Linux升级ssh、ssl
  16. 英伟达显卡控制面板没有显示设置的三种解决方法
  17. SEO人员,不要见风是雨
  18. STM32/STM8+DMX512协议
  19. 三维空间点到直线的距离C++实现
  20. 防火墙阻止了IE服务器未响应,ie防火墙如何禁用

热门文章

  1. 云计算在未来一定是不可或缺的
  2. MongoDB复制集技术
  3. Spring Roo 简介
  4. Tomcat 的 DefaultServlet
  5. 软件工程概论作业01
  6. 伯纳德•罗森伯格先生参加华为技术2016首届国际光电连接技术研讨会
  7. CSS3 2D Transform
  8. 浅谈mysql的子查询
  9. 五个在线图形工具创建简单的设计元素
  10. 在俱乐部首页看不到的团队成员(更新中...)