python 定义method_python进阶14:实例方法和类方法、types.MethodType()
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()相关推荐
- python 类中方法总结 --- 实例方法、类方法、静态方法
在python的类语法中,可以出现三种方法,具体如下: (1)实例方法 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例 ...
- Python基础学习——面向对象编程(第一讲:面向对象概述、面向对象三个基本特征(封装性、继承性、多态性)、类和对象(定义类、创建和使用对象、实例变量、类变量、构造方法、实例方法、类方法、静态方法))
面向对象是Python最重要的特性,在Python中一切数据类型都是面向对象的. 1.面向对象概述 面向对象的编程思想是,按照真实世界客观事物的自然规律进行分析,客观世界中存在什么样的实体,构建软件系 ...
- Python 实例方法、类方法和静态方法
在 Python 中,实例方法(instance method),类方法(class method)与静态方法(static method)经常容易混淆.本文通过代码例子来说明它们的区别. 实例方法 ...
- python类中方法调用自己类的方法_python 类中方法总结 --- 实例方法、类方法、静态方法...
在python的类语法中,可以出现三种方法,具体如下: (1)实例方法 1)第一个参数必须是实例本身,一般使用[self]表示. 2)在实例方法中,可以通过[self]来操作实例属性,[类名]来操作类 ...
- python 类变量、实例变量、参数、实例方法、类方法、静态方法 的用法和区别
#!/usr/bin/env python # -*- encoding: utf-8 -*- """ @Introduce : 类变量.实例变量.参数.实例方法.类方法 ...
- python 静态方法 类方法 的作用_Python实例方法、类方法、静态方法的区别与作用详解...
本文实例讲述了Python实例方法.类方法.静态方法的区别与作用.分享给大家供大家参考,具体如下: Python中至少有三种比较常见的方法类型,即实例方法,类方法.静态方法.它们是如何定义的呢?如何调 ...
- python中实例方法分类_python方法的分类(实例方法、类方法、静态方法)
方法和函数的区分 很多童鞋会比较疑惑,方法和函数有什么区别,都是通过def去定义的啊? 只需要记住一点,方法是用来描述一个目标的行为动作! 不论你是直接通过 类名.方法调用,还是通过由类生成的实例.方 ...
- python中类方法与实例方法的区别-Python实例方法、类方法、静态方法的区别与作用详解...
本文实例讲述了Python实例方法.类方法.静态方法的区别与作用.分享给大家供大家参考,具体如下: Python中至少有三种比较常见的方法类型,即实例方法,类方法.静态方法.它们是如何定义的呢?如何调 ...
- python的用途实例-Python实例方法、类方法、静态方法的区别与作用详解
本文实例讲述了Python实例方法.类方法.静态方法的区别与作用.分享给大家供大家参考,具体如下: Python中至少有三种比较常见的方法类型,即实例方法,类方法.静态方法.它们是如何定义的呢?如何调 ...
最新文章
- 基于Flutter+FaaS的业务框架思考与实践
- iOS推送兼容iOS7
- java if语句选择题_选择语句(if else) 习题(2017/12/1)
- sql join教程
- WebService 的创建,部署和使用
- Linux下php添加新扩展
- [BUUCTF-pwn]——inndy_rop
- ServletRequestAttributes用法详解——Spring系列学习笔记
- Python介绍与特点(自学python知识整理)
- 前端学习(2143):webpack的config.js配置和package.json
- IDEA06 代码规范检测插件之Alibaba Java Coding Guidelines
- iOS 14.5新功能:解锁iPhone更方便!
- Ex 6_23 一个生产系统共包含n个顺序执行的阶段..._第七次作业
- 当FORM的ENCTYPE=quot;multipart/form-dataquot; 时request.getParameter()获取不到
- Linux升级ssh、ssl
- 英伟达显卡控制面板没有显示设置的三种解决方法
- SEO人员,不要见风是雨
- STM32/STM8+DMX512协议
- 三维空间点到直线的距离C++实现
- 防火墙阻止了IE服务器未响应,ie防火墙如何禁用