资讯专栏INFORMATION COLUMN

类方法 和 外部方法

big_cat / 3229人阅读

摘要:类方法类内部定义的方法外部方法定义在类外的方法,但是带上了参数。具体做法是通过给类一个实例绑定外部方法。例如创建新的实例尝试调用该方法报错若要给类的所有实例绑定外部方法,则需要给类动态绑定该方法。


类方法:类内部定义的方法

外部方法:定义在类外的方法,但是带上了self参数。

居于动态语言的灵活性,我们知道可以动态的给实例绑定属性,那是否可以给实例绑定一个方法,成为实例方法。
例如:

class Student(object):
      pass
>>>s = Student()
>>>s.name = "xlp"          # 动态语言的灵活性:动态给实例绑定一个属性
def set_age(self,age)         # 定义一个外部方法:set_age(),不是class里的
self.age = age

可以创建一个链接把外部的set_age()方法链接到Student内。
具体做法是:通过MethodType给类一个实例绑定外部方法。

from types import MethodType   # ##????
s.set_age = MethodType (set_age,s)  # 给实例绑定一个方法
s.set_age(24)   # 调用实例方法
s.age   #测试结果
24

但是该方法对除开实例s,对其他实例是不起作用的。
例如:

s2 = Student()   # 创建新的实例
s2.set_age(25)   # 尝试调用该方法
# 报错
#Traceback (most recent call last):
#  File "", line 1, in 
#AttributeError: "Student" object has no attribute "set_age"

若要给类的所有实例绑定外部方法,则需要给类动态绑定该方法。

>>>def set_score(self,score):
     self.score = score 
>>>Student.set_score = set_score    # 直接用类来创建一个方法
>>> s.set_score(100)
>>> s.score
100
>>> s2.set_score(59)
>>> s2.score
59

此时实例和类都指向同一个set_score()。

通常,上面的set_score()方法一般直接定义在class中,但动态绑定允许我们在程序运行的过程中动态地给class加上功能。


❤ thanks for watching, keep on updating...
点个赞再走吧

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44980.html

相关文章

  • java内部总结

    摘要:每个内部类都能独立地继承一个接口,而无论外部类是否已经继承了某个接口。因此,内部类使多重继承的解决方案变得更加完整。内部类中的与其他类一样是指的本身。但是静态内部类却没有。 问题:内部类、静态内部类区别、使用场景? 1.静态内部类可以有静态成员(方法,属性),而非静态内部类则不能有静态成员(方法,属性)。 2.静态内部类只能够访问外部类的静态成员,而非静态内部类则可以访问外部类的所有...

    xiaodao 评论0 收藏0
  • Java系列之内部

    摘要:方法内部类就是局部内部类,一般定义在类的局部位置,它可以访问当前代码块及外部类的所有变量。 今天温习一下 Java 中的内部类,内部类一般有如下几种:静态内部类、成员内部类、匿名内部类和方法内部类,下文中将主要介绍静态内部类和成员内部类,主要内容如下: 概述 静态内部类 成员内部类 匿名内部类和方法内部类 总结 概述 顾名思义内部类就是在一个类内部定义的类,它是内部类是一个独立的类...

    crelaber 评论0 收藏0
  • java面向对象(下)

    内部类 内部类主要作用 内部类提供了更好的封装,可以吧内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类。 内部类成员可以直接访问外部类的私有数据,因为内部类被当成其外部类成员,同一个类的成员之间可以互相访问,但外部类不能访问内部类的实现细节。 匿名内部类适合用于创建那些仅需要使用一次的类。 定义内部类与外部类的语法大致相同,内部类除需要定义在其他类里面之外,还有两点区别: 内...

    awesome23 评论0 收藏0
  • Java知识点总结(三个步骤)

    摘要:对于一个名为的外围类和一个的内部类,在编译成功后,会出现这样两个文件和。 Java知识点总结(三个步骤) @(Java知识点总结)[Java, Java面向对象] [toc] 1-定义类 修饰符 访问修饰符: public protected default private 其他修饰符 abstract:抽象类不能实例化,专门用于继承的类final:最终类不能被继承 类名(驼峰命名...

    syoya 评论0 收藏0
  • Java 抽象、接口、内部

    摘要:即使抽象类里不包含抽象方法,这个抽象类也不能创建实例抽象类可以包含成员变量方法普通方法和抽象方法构造器初始化块内部类接口枚举种成分。 抽象类 当编写一个类时,常常会为该类定义一些方法,这些方法用以描述该类的行为方式,那么这些方法都有具体的方法体。但在某些情况下,某个父类只是知道其子类应该包含怎样的方法,但无法准确地知道这些子类如何实现这些方法。使用抽象方法即可满足该要求:抽象方法是只有...

    miguel.jiang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<