zoukankan      html  css  js  c++  java
  • 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'))
  • 相关阅读:
    Python-内置数据结构listdictset
    Python-内置结构listsetdicttuple
    Python-内置数据结构
    Python-函数作用域和集合列表字典元祖
    Python-函数参数和文档
    Python-while循环+函数
    Python-分支循环
    Python基础
    五、Jmeter-数据库数据进行参数化
    mysql索引:四种类型,两种方法
  • 原文地址:https://www.cnblogs.com/louyefeng/p/9526240.html
Copyright © 2011-2022 走看看