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

    类中定义函数分为了两大类:

    1.绑定方法:

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

      如何用:

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

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

    2.非绑定方法:

            特殊之处:

        非绑定方法就是一个普通函数,既不与类绑定又不与对象绑定,意味着类与对象都可以调用,但是无论谁来调用都是一个普通函数,没有自动传值的效果

         如何用:

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

    三种方法使用:关键看函数体的代码具体使用情况

    import  uuid

    print(uuid.uuid4())

    1.绑定给对象的方法

        绑定给对象的,应该由对象来调,

        obj.func()

     print(obj)

    绑定给对象的方法:类也可以调用,但是类调用就是一个普通函数,没有自动传值的效果

    print(obj.func1)

    print(Foo.func1)

    Foo.func1(obj)

    2.绑定给类的方法

    绑定给类的,应该由类来调用(如用对象来调用,自动传的还是类)

    print(Foo.func2)

    print(obj.func2)

    Foo.func2()

    obj.func2()

    3.非绑定方法

    print(obj.func3)

    print(Foo.func3)

    obj.func3(1,2)

    Foo.func3(1,3)

    # class Foo:
    #     def func1(self):
    #         print('func1',self)
    #
    #     @classmethod
    #     def func2(cls):
    #         print('func2',cls)
    #
    #     @staticmethod
    #     def func3(x,y):
    #         print('func3',x,y)
    #
    # obj=Foo()
    # ==========================
    # import settings
    #
    # class MySQL:
    #     def __init__(self,ip,port):
    #         self.id=self.create_id()
    #         self.ip=ip
    #         self.port=port
    #
    #     def tell_info(self):
    #         print('<%s:%s:%s>' % (self.id,self.ip, self.port))
    #
    #     @classmethod
    #     def from_conf(cls):
    #         return cls(settings.IP, settings.PORT)
    #
    #     @staticmethod
    #     def create_id():
    #         import uuid
    #         return uuid.uuid4()
    
    # obj=MySQL('1.1.1.1',3306)
    # obj1=MySQL('1.1.1.2',3406)
    # obj.tell_info()
    # obj1.tell_info()
    
    # obj2=MySQL.from_conf()
    # obj2.tell_info()

    反射   

      反射指的是通过字符串的形式来操作对象的相关属性

      python 中的一切事物都是对象(都可以使用反射)

    hasattr    判断属性或功能是否存在

    print(hasattr(obj,'name'))  #obj.name

    print(hasattr(obj,'tell_info'))  #obj.tell_info

    getattr   查询属性, None的位置是填默认值

    res = getattr(obj,'name')   #res = obj.name

    res = getattr(obj,'xxx',None)

    setattr  更改  新增

    setattr (obj,'age',38)

    setattr(obj,'xxx',None)

    delattr  删除

    delattr(obj,'name')

    # isinstance(obj,cls)检查是否obj是否是类 cls 的对象
    # issubclass(sub, super)判断是否是子类(检查sub类是否是 super 类的派生类)
    '''
    # isinstance(obj,cls)检查是否obj是否是类 cls 的对象
    # print(isinstance([],list)) #type([]) is list
    # class Foo:
    #     pass
    # obj=Foo()
    # print(isinstance(obj,Foo))
    
    # issubclass(sub, super)判断是否是子类(检查sub类是否是 super 类的派生类)
    # class Foo:
    #     pass
    #
    # class Bar(Foo):
    #     pass
    # print(issubclass(Bar,Foo))
    '''
    
    # __str__: 会在对象被打印时自动触发,然后将返回值返回给print功能进行打印
    # l=list([1,2,3])
    # print(l) #(同理,定制对象的显示效果,常用!!!)
    
    # __del__: 会在对象被删除时自动触发执行,用来在对象被删除前回收系统资源
    # 常用语回收 文件的关闭
    '''
    # __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 Foo:
    #     def __del__(self):
    #         print('===>')
    #
    # obj=Foo()
    # # del obj
    # print('其他代码...')
    
    # 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
  • 相关阅读:
    C#字符串转换为数字的4种方法
    Linq to SQL Xml Based
    Code Snippets in Visual Studio 2010
    cygwin 压缩
    Cygwin安装Gitolite3
    ubuntu下如何用命令行运行deb安装包
    iconv bom
    __stdcall型dll转lib
    cygwin install lua modules
    luacom cygwin
  • 原文地址:https://www.cnblogs.com/frank007/p/9878085.html
Copyright © 2011-2022 走看看