• Python面向对象(三)


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

      一.绑定方法:绑定给谁就应该由谁来调用,谁来调用就会将谁当作第一个参数传入
        1.绑定给对象的方法:类中定义的函数默认就是绑定给对象的
        2.绑定给类的方法:为类中定义的函数加上一个装饰器@classmethod

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

      案例如下:

    class Foo:
        def f1(self):
            print(self)
    
        @classmethod
        def f2(cls):
            print(cls)
    
        @staticmethod
        def f3(a, b):
            print('f3', a * b)
    import settings
    class Mysql:
        def __init__(self,ip,port):
            self.ip = ip
            self.port = port
            self.id = self.create_id()
    
        def tell_info(self):
            print('ip:%s  port:%s  id:%s'%(self.ip,self.port,self.id))
    
        @classmethod
        def from_conf(cls):
            return cls(settings.IP,settings.PORT)
    
        @staticmethod
        def create_id():
            import uuid
            return uuid.uuid4()
    
    obj1 = Mysql.from_conf()
    obj2 = Mysql('10.1.183.16',8080)
    obj1.tell_info()
    obj2.tell_info()
    小案例

    二.isinstance与issubclass

      isinstance(obj,cls)检查obj是否是类cls的对象

    class Foo:
        pass
    
    obj = Foo()
    # 类型判断
    print(isinstance(obj,Foo))

      issubclass(sub,super)检查sub类是否是super类的子类

    class Foo:
        pass
    class Bar(Foo):
        pass
    obj = Foo()
    
    # 判断是否子类
    print(issubclass(Foo,Bar))

    三.反射

      python面向对象中的反射:通过字符串的形式操作对象相关的属性,python中的一切事物都是对象,用字符串取代点(.)对属性的操作

      hasattr(o,name)判断某一个属性是是否存在

      setattr(obj,name,value)给对象一个属性,属性名给name,值为value

      getattr(o,name,default)获得对象name属性的值,不声明default时不存在该属性会报错

      delattr(o,name)删除对象的name属性

    class Person:
        def __init__(self,name,age):
            self.name = name
            self.age = age
    
        def run(self):
            print('%s run'%self.name)
    
    obj = Person('Yven',18)
    delattr()
    print(hasattr(obj,'name'))#'name' in  obj.__dict__
    print(getattr(obj,'name',None))#obj.__dict__['name']
    setattr(obj,'sex','male')#obj.__dict__['sex'] = 'male'
    print(obj.sex)
    delattr(obj,'sex')
    print(obj.__dict__)
    setattr(obj,'address','shanghaipudong')
    print(obj.address)
    print(hasattr(obj,'address'))
    delattr(obj,'address')
    print(hasattr(obj,'address'))
  • 相关阅读:
    安卓代码混淆与反射冲突,地图无法显示等问题解决及反编译方法
    脱掉360奇虎的“加固保”壳后的发现与你的微信安全
    android 发送http请求
    mysql sql优化
    hdu 1548 A strange lift
    【转】vc中使用SendMessage正确发送自定义消息的方法--不错
    【转】各种常用浏览器“兼容性视图”设置方法
    IE 弹出"Unable to do xml/xsl" Processing
    【转】MFC界面更新实现方法
    【转】怎么在Foxmail回复/转发时使用签名?
  • 原文地址:https://www.cnblogs.com/louyefeng/p/9526240.html
Copyright © 2020-2023  润新知