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

    同对象调用要求一致

    三:总结

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

    绑定到对象的方法:

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

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

    绑定到类的方法:

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

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

    非绑定方法:

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

  • 相关阅读:
    SQL Server 日期和时间函数
    sql日期格式化函数
    C#中事件的使用
    CSS中的display:inline-block
    用aspnet_regiis注册Framework4.0框架
    什么是CSS hack
    第一次MySQL的SQL注入实验
    (二分)Block Towers(cf626)
    (多线程dp)Matrix (hdu 2686)
    (数位dp)Bomb (hdu 3555)
  • 原文地址:https://www.cnblogs.com/li1992/p/9152680.html
Copyright © 2011-2022 走看看