zoukankan      html  css  js  c++  java
  • 绑定方法和非绑定方法

    一:绑定方法

    绑定方法有两种,一种是与对象绑定,在类中定义的方法都是都是默认与对象绑定的,另一种是绑定到类的方法,要加上classmethod装饰器:

    class People:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def get_name(self):
            print("我的名字是:{}".format(self.name))
    
        @classmethod
        def say_hello(cls):
            print('hello!!', cls.__name__)
    
        @staticmethod
        def info(self, a, b):
            print(self.name, a, b)
    演示案例

    绑定到对象的方法:

    定义:类中定义的方法都默认绑定对象

    def get_name(self):
        print("我的名字是:{}".format(self.name))

    对象来调用

    p1 = People('ls', 19) #实例化出一个对象
    p1.get_name() #调用绑定到对象的方法
    
    #运行结果:我的名字是:ls

    类来调用

    p1 = People('ls', 19)
    Pepel.get_name(p1) #需要传入一个参数
    
    #运行结果:我的名字是:ls

    其它的类和其实例化对象来调用,都不能调用。这是因为类中定义的方法,其方法名称存在于类的名称空间之中。

    绑定到类的方法:

    绑定到类的方法的定义:是类中用classmethod装饰的方法

    @classmethod
    def say_hello(cls):
        print('hello!!', cls.__name__)

    对象来调用:

    p1 = People('ls', 19)
    p1.say_hello()  #对象调用绑定到类的方法
    
    #运行结果:hello!! People

    对象调用,会自动把对象的类作为第一个参数自动传入

    类来调用:

    People.say_hello()
    
    #运行结果:hello!! People

    类调用绑定到类的方法,有自动传值的特性,会把类本身作为第一个参数自动传入

    二:非绑定方法

    非绑定方法是类中用staticmethod装饰的方法,被staticmethod装饰的方法不与任何对象和类绑定。

    定义非绑定方法:

    @staticmethod
        def info(self, a, b):
            print(self.name, a, b)

    对象调用:

    p1 = People('ls', 19)
    p1.info(p1, 1, 2)
    
    #运行结果:ls 1 2

    没有指定自动传值的特性,按照一般函数的参数传入要求传值。

    类来调用:

    People.info(p1, 2, 3)
    
    #运行结果:ls 2 3

    同对象调用要求一致

    三:总结

    无论是绑定到对象的方法,还是绑定到类的方法,亦或是静态方法,类和类的对象都可以调用,其中:

    绑定到对象的方法:

            对象调用有自动传值特性,会把对象本身当做第一个值自动传入;

            类来调用,失去自动传值的特性,必须要传入一个满足条件的实参。

    绑定到类的方法:

            类调用有自动传值特性,会把类本身当做第一个值自动传入;

            对象调用会自动把对象的类当做第一个值自动传入。

    非绑定方法:

      不与任何绑定,类和类的实例化对象都可以调用,没有自动传值的特性,调用静态方法,就像调用普通函数一样必须传入与形参一一对应的实参。

  • 相关阅读:
    iOS Reachability检测网络状态
    开始运行命令大全
    IBM-x3650做RAID5更换硬盘后rebuild步骤分享
    使用VMware Converter Standalone Client进行虚拟机 P2V提示 权限不足,无法连接\ipadmin$的解决方法集锦
    共享文件夹 帐号密码正确,却一直提示输入帐号密码的解决办法
    Cisco 关闭命令同步提示信息
    EtherChannel(PAgP、LACP)基本配置--端口聚合--(转)
    Cisco Port-Channel 设置(链路聚合--重点)
    SQL Server 2008作业失败无法确定所有者是否有服务器访问权限
    windows server 2003 远程桌面最大连接数调整与windows 2008远程桌面后,本地帐号自动锁定
  • 原文地址:https://www.cnblogs.com/li1992/p/9152680.html
Copyright © 2011-2022 走看看