美文网首页
29-python中方法也是属性

29-python中方法也是属性

作者: mingminy | 来源:发表于2017-12-22 12:24 被阅读0次

我们在class中定义的实例方法其实也是属性,它实际上是一个函数对象:

class Person(object):    def __init__(self, name, score):        self.name = name        self.score = score    def get_grade(self):        return 'A'p1 = Person('Bob', 90)print p1.get_grade# => >print p1.get_grade()# => A

也就是说,p1.get_grade返回的是一个函数对象,但这个函数是一个绑定到实例的函数,p1.get_grade()才是方法调用。

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

import typesdef 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 = scorep1 = Person('Bob', 90)p1.get_grade = types.MethodType(fn_get_grade, p1, Person)print p1.get_grade()# => Ap2 = Person('Alice', 65)print p2.get_grade()# ERROR: AttributeError: 'Person' object has no attribute 'get_grade'

# 因为p2实例并没有绑定get_grade

给一个实例动态添加方法并不常见,直接在class中定义要更直观。

相关文章

  • 29-python中方法也是属性

    我们在class中定义的实例方法其实也是属性,它实际上是一个函数对象: class Person(object):...

  • js中数组对象去重的方法

    采用数组中的reduce方法,遍历数组,也是通过对象访问属性的方法 参考js中数组对象去重的方法

  • JavaScrip原型理解(二)

    在JavaScript中,函数本身也是一个包含了属性和方法的对象,每个函数都有prototype属性,而该属性所储...

  • JavaScript中的类方法、对象方法、原型方法

    类方法:也叫函数方法,在JavaScript中函数也是一个对象,所以可以为函数添加属性以及方法; 对象方法:包括构...

  • kotlin接口

    kotlin中的接口与Java8中的类似,既包含方法也包含属性。方法包括抽象方法和普通方法,属性包含抽象属性和普通...

  • computed深入

    计算属性set/get 计算属性 (单向)在computed属性对象中定义计算属性的方法,在页面使用{{方法名}}...

  • # 数组常用属性和方法总结

    数组常用属性和方法总结 数组也是对象,数组有对象的所有方法 1. 数组属性(2个主要属性) length -> 万...

  • ios 分类中如何添加数据成员

    分类中可以声明属性,因为声明属性其实就是声明设置方法和获取方法。但是分类中不可以合成属性,因为合成属性其实就是创建...

  • JavaScript中的对象

    一 、什么是对象? 对象就是属性和方法的集合。在JS中,属性就是变量,方法就是函数,属性称作成员属性,方法称作成员...

  • 2018-08-01 python学习—面向对象(私有化)

    python中类中的属性和方法的私有化:直接在属性名或者方法名前加(命名的以''开头) 属性或者方法私有:在外部不...

网友评论

      本文标题:29-python中方法也是属性

      本文链接:https://www.haomeiwen.com/subject/ohvtgxtx.html