美文网首页
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中方法也是属性

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