zoukankan      html  css  js  c++  java
  • 009---绑定方法与非绑定方法

    绑定方法和非绑定方法

    绑定方法(绑定给谁,谁来调用就自动将它本身作为第一个参数传进去)

    • 绑定给类:没有加任何装饰器的方法,其实对象也可以调用。只不过内部将类作为第一个参数传进去。
    • 绑定给对象:加classmethod装饰器的方法,其实类也可以调用,只不过要将对象作为第一个参数传进去。

    非绑定方法

    • 在类的内部使用staticmethod装饰器的函数叫做非绑定方法,谁都可以调用,没有自动传值一说,就是普通函数。
    #! /usr/bin/env python
    # -*- coding: utf-8 -*-
    # __author__ = "ziya"
    # Date: 2018-08-27
    
    
    class Foo:
        def __init__(self, name):
            self.name = name
    
        def tell(self):
            return '名字是:%s' % self.name
    
        @classmethod
        def func(cls):
            return '类方法:%s' % cls
    
        @staticmethod
        def func1(obj):
            print('我是非绑定方法,谁都(%s)可以调用' % obj)
    
        def func2():
            print(111)
    
    
    f = Foo('江伟')
    
    print('绑定到类,类方法:', Foo.func)
    print('绑定到对象,实例方法:', f.tell)
    print('类调用实例方法,但是第一个参数传对象', Foo.tell(f))
    print('对象用类方法,虽然不要传参数,但是内部仍然是以类作为第一个参数传入', f.func())
    
    f.func1('我是对象')  # 我是非绑定方法,谁都(我是对象)可以调用
    Foo.func1('我是类')  # 我是非绑定方法,谁都(我是类)可以调用
    
    '''
    在内部定义的函数,分为两大类:
        1、绑定方法:
            ---绑定到对象的方法:未被任何装饰器修饰的
                绑定给谁,就应该由谁来调用,会自动传参
    
            ---绑定到类的方法:在类内部定义的被装饰器classmethod修饰的方法
    
        2、非绑定方法
            没有自动传值一说,就是一普通工具而已
    '''
    

    绑定到类,类方法: <bound method Foo.func of <class 'main.Foo'>>
    绑定到对象,实例方法: <bound method Foo.tell of <main.Foo object at 0x000002B240FAED68>>
    类调用实例方法,但是第一个参数传对象 名字是:江伟
    对象用类方法,虽然不要传参数,但是内部仍然是以类作为第一个参数传入 类方法:<class 'main.Foo'>
    我是非绑定方法,谁都(我是对象)可以调用
    我是非绑定方法,谁都(我是类)可以调用

  • 相关阅读:
    Nginx的访问控制
    远程登录
    Linux的网络命令
    laravel-collect
    laravel-model
    laravel-Macroable
    laravel-容器
    机器学习-Logisitic回归
    机器学习-多变量线性回归
    算法笔记-分支界限法
  • 原文地址:https://www.cnblogs.com/xjmlove/p/10324522.html
Copyright © 2011-2022 走看看