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

    '''
    绑定方法
    类中定义函数分为了两大类:
    1. 绑定方法
    特殊之处: 绑定给谁就应该由谁来调用,谁来调用就会将谁当做第一个参数自动传入
    如何用:
    绑定给对象的方法: 在类中定义函数没有被任何装饰器修饰的情况下,默认就是绑定对象的
    绑定给类的方法: 为类中定义函数添加一个装饰器classmethod,就是绑定类的

    2. 非绑定方法
    特殊之处: 非绑定方法就是一个普通函数,既不与类绑定又不与对象绑定,
    意味着类与对象都可以调用,但是无论谁来调用都是一个普通函数,没有自动传值效果
    如何用:
    非绑定方法: 为类中定义函数添加一个装饰器staticmethod,就是非绑定方法

    三种方法使用:关键是看函数体的代码具体使用情况
    import uuid
    print(uuid.uuid4())

    #一.绑定给对象的方法
    # 绑定给对象的,应该由对象来调,
    # 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 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,'sex','male')

    #delattr 删除
    # delattr(obj,'name')
    '''
    '''
    # 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__)
    '''

    # 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
    '''

    # =================================(后期)
    # 四 二次加工标准类型(包装)
    # 六 描述符(__get__,__set__,__delete__)
    # 熟透对象后再看这两块知识:
    # http://www.cnblogs.com/linhaifeng/articles/6204014.html
  • 相关阅读:
    Java代码输出是“father”还是“child”(二)
    Java代码输出是“father”还是“child”(一)
    “var arr = []; ”和 “var arr = {};” 的区别
    Servlet页面间对象传递的方法
    利用OWI优化SQL
    Oracle 12c 12.1.0.1.0管理控制文件官方文档说明
    计算工资
    检测本地网络连接状态断开以及恢复的方法
    linux 批量创建用户
    比较两表数据
  • 原文地址:https://www.cnblogs.com/du-jun/p/9850177.html
Copyright © 2011-2022 走看看