zoukankan      html  css  js  c++  java
  • 绑定方法与非绑定方法 反射 内置方法

    一.绑定方法与非绑定方法

      1.绑定方法

        特殊之处:绑定给谁就应该由谁来调用,谁来调用就会将谁当做第一个参数自动传入

          绑定个对象的方法:在类中定义函数没有被任何装饰器修身的情况下,默认就是绑定对象的

            绑定给类的方法:为类中定义函数添加一个装饰器classmethod,就是绑定类的

      2.非绑定方法

        特殊之处:非绑定方法就是一个普通普通的函数,既不与类绑定又不与对象绑定,意味着类与对象都可以调用

    但是无论谁来调用都是一个普通函数,没有自动传值得效果

        非绑定方法:为类中定义函数添加一个装饰器staticmethod,就是非绑定方法

    class Foo:
        def func1(self):
            print('func1,self)
    
        @classmethod
        def func2(cls):
            print('func2',cls)
        @staticmethod
      def func3()
        print('func3',cls)
    obj=Foo() #一.绑定给对象的方法 #绑定个对象的,应该由对象来调 obj.func1() print(obj) #绑定给对象的方法,类也可以调用,但是累调用就是一个普通函数,没有自动传值得效果 print(obj.func1) print(Foo.func1) Foo.func1(obj) #二.绑定给类的方法 #绑定给类的,应该由类来调, print(Foo.func2) print(obj.func2) Foo.func2() obj.func2() #三.非绑定方法 print(obj.func3) print(Foo.func3) obj.func3(1,2) Foo.func3(1,3)

    三.反射

      反射指的是通过字符串来操作属性

    class Foo:
        def __init__(self,name,age):
            self.name=name
            self.age=age
    
        def tell_info(self):
            print('%s:%s' %(self.name,self.age))
    
    obj=Foo('egon',18)
    
    #hasattr
    # print(hasattr(obj,'name')) #obj.name
    # print(hasattr(obj,'tell_info')) #obj.tell_info
    
    #getattr
    # res=getattr(obj,'name') #res=obj.name
    # print(res)
    # res=getattr(obj,'xxx',None)
    # print(res)
    
    #setattr#修改,不存在则创造
    # setattr(obj,'age',38)
    # setattr(obj,'sex','male')
    # print(obj.__dict__)
    # print(obj.sex)
    
    #delattr#删除
    # delattr(obj,'name')
    if hasattr(obj,'xxxxe'):
        delattr(obj,'xxxxe')
    # print(obj.__dict__)

    四.内置方法

    __str__:会 在对象被打印时自动触发,然后将返回值返回给print功能进行打印

    class People:
        def __init__(self,name,age):
            self.name=name
            self.age=age
    
        def __str__(self):
            return '<%s:%s>' %(self.name,self.age)
    
    peo=People('egon',18)
    print(peo) #print(peo.__str__())
    
    l=list([1,2,3])
    print(l)

    __del__:会在对象呗删除是自动触发执行,用来在对象被删除前回收系统资源

    class Bar:
        def __init__(self,x,y,filepath):
            self.x=x
            self.y=y
            self.f=open(filepath,'r',encoding='utf-8')
        def __del__(self):
            # 写回收系统资源相关的代码
            self.f.close()
    
    obj=Bar(10,20)
    del obj
  • 相关阅读:
    Python面向对象:继承和多态
    Python面向对象:类、实例与访问限制
    Python正则表达式匹配猫眼电影HTML信息
    Git:从github上克隆、修改和更新项目
    Python:闭包
    JPA-映射-(@ManyToMany)双向多对多
    rownum详解
    java之yield(),sleep(),wait()区别详解
    springmvc<一>一种资源返回多种形式【ContentNegotiatingViewResolver】
    @RequestParam,@PathVariable,@ResponseBody,@RequestBody,@ModelAttribute学习
  • 原文地址:https://www.cnblogs.com/gongcheng-/p/9850387.html
Copyright © 2011-2022 走看看