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

    1.绑定方法

    """
    绑定方法: 特殊之处在于将调用者本身当做第一个参数自动传入
    """
    

    1.1绑定给对象的方法

    绑定给对象的方法 : 调用者是对象,自动传入的是对象

    class foo:
        def say(self):
            print('我说: 你好啊')
    
    obj = foo()
    obj.say()        # 其中say是绑定给对象的方法 , 虽然它写在类中
    

    1.2绑定给类的方法

    绑定给类的方法 : 调用者类 , 自动传入的是类

    import settings
    
    
    class Mysql:
        def __init__(self, ip, port):
            self.ip = ip
            self.port = port
    
        def func(self):
            print(f"{self.ip}:{self.port}")
    
        @classmethod   # 将下面的函数装饰成绑定给类的方法
        def from_conf(cls):
            print(cls)  # 当前类
            return cls(settings.ip, settings.PORT)
    """
    很多时候类方法都是提供一种从配置文件中实例化对象的这个方法
    类方法应用场景 : 一种新的造对象 , 初始化的方法 (可能来自配置文件或其他)
    """
    

    那么什么时候这个方法应该是绑定给对象的 , 还是绑定给类的呢 ? 怎么判断呢?

    这个就需要看你的函数体代码的具体功能 , 如果函数体代码用到对象 , 那就是绑定给对象 , 函数体代码用到类那就绑定给类
    

    2.非绑定方法

    在绑定方法中要么绑定给对象 , 要么绑定给类 , 然后函数体代码中有对象或者类 , 那么有没有一种函数体代码中 , 既不用到对象 , 也不用到类呢??? 这种函数就是非绑定方法也叫静态方法

    class Mysql:
        def __init__(self, ip, port):
            self.ip = ip
            self.port = port
    
        @staticmethod   # 将下面方法装饰成一个非绑定方法
        def create_id():
            import uuid
            return uuid.uuid1()
    

    既然没有绑定 谁来调用呢 ? 因为没有绑定 , 所以对象和类都可以调用 , 但是没有自动传参的效果

    obj = Mysql('127.0.0.1', 8080)
    print(obj.create_id())
    print(Mysql.create_id())
    

    应用场景 : 当函数体代码中不需要类 , 也不需要对象 , 并且你还想把这个方法集成在类内部 , 就使用非绑定方法

  • 相关阅读:
    android自定义Activity窗体大小
    Android UI设计--半透明效果对话框及activity(可做遮罩层)
    Android借助Handler,实现ViewPager中页面的自动切换(转)
    Android开发之Intent跳转到系统应用中的拨号界面、联系人界面、短信界面
    阅读(1)
    Android 之 下拉框(Spinner)的使用-转
    android中自定义下拉框(转)
    androidwebview网页显示事件
    androidwebview timeout
    android开源框架
  • 原文地址:https://www.cnblogs.com/xcymn/p/15721354.html
Copyright © 2011-2022 走看看