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

    在类内部定义的函数,分为两大类

     一:绑定方法:绑定给谁,就应该由谁来调用,就会把调用者当作第一个参数自动传入

    • 绑定到对象的方法:在类内定义的没有被装饰器修饰的
    • 绑定到类的方法:在类的内部定义的被装饰器classmethod修饰的方法

      二:非绑定方法:没有自动传值这么一说,就是类中定义的一个普通工具,对象和类都可以使用

    • 非绑定方法:不与类或者对象绑定
    View Code

    绑定方法与非绑定方法的应用

    View Code

    反射

    反射:通过字符串映射到对象的属性

    class People:
        country = 'china'
    
        def  __init__(self,name,age):
            self.name = name
            self.age = age
    
        def talk(self):
            print('%s is talking' %self.name)
    
    obj = People('egon',18)
    
    print(obj.name) # __init__(obj) name是属性,不是字符串
    print(obj.talk)
    
    # choice = input('>>:') #choice='name'
    # print(obj.choise) #print(obj.'name')
    
    #判断
    print(hasattr(obj,'name')) #判断obj.name #本质上是去判断obj.__dict__['name']
    print(hasattr(obj,'talk')) #判断obj.talk
    
    # 获取
    print(getattr(obj,'namexx',None))
    print(getattr(obj,'talk',None))
    
    # 修改|新增
    setattr(obj,'sex','male') #obj.sex='male'
    print(obj.__dict__)
    print(obj.sex)
    
    # 删除
    delattr(obj,'age') #del obj.age
    print(obj.__dict__)
    
    
    ####类和对象的用法大同小异
    # print(getattr(People,'country')) #People.country
    View Code

    反射的应用

    可以用于对用户输入的字符进行判断

    用处:接受用户的输入触发对象的某一个方法

    总结:通过字符串来访问到对象或类的数据属性和函数属性

    class Service:
        def run(self):
            while True:
                inp = input('>>:').strip() #cmd='get a.txt'
                cmds=inp.split() #cmds=['get','a.txt']
    
                # print(cmds)
                if hasattr(self,cmds[0]): #判断是否有cmd的属性
                    func = getattr(self,cmds[0])
                    func(cmds)
    
        def get(self,cmds):
            print('get.....',cmds)
    
        def put(self,cmds):
            print('set.....',cmds)
    
    obj = Service()
    obj.run()
    View Code

    内置方法

    1.isinstance() isinstance(f,Foo) 什么是什么的对象

    2.issubclass() issubclass(Foo,Bar) 什么是什么的子类

    3.item系列: 把对象做成一个像字典对象那样 像字典对象那样访问数据

    • 查看属性 def __getitem__(self, item):         obj['name'] 触发
    • 设置属性 def __setitem__(self, key, value): obj['sex']='male' 触发
    • 删除属性 def __delitem__(self, key): del     obj['name']
    class Bar:
        pass
    class Foo(Bar):
        pass
    f=Foo()
    # print(isinstance(f,Foo))
    # print(issubclass(Foo,Bar))
    # print(issubclass(Bar,Foo))
    
    # item 系列
    class Foo:
        def __init__(self,name):
            self.name=name
    
        def __getitem__(self, item):
            # return self.__dict__[item]  # 若是没有 会报错
            return self.__dict__.get(item)
    
        def __setitem__(self, key, value):
            self.__dict__[key]=value
    
        def __delitem__(self, key):
            del self.__dict__[key]
    
        def __str__(self):
            return '<name:%s>'%self.name
    
        def __del__(self):
            # self.close()
            print('回收操作系统的 资源')
    
    obj=Foo('alice')
    # print(obj.__dict__)
    # print(obj.name)
    # print(obj['name'])
    # obj['name']='aaaa'
    # print(obj.__dict__)
    # del obj['name']
    # print(obj.__dict__)
    # obj.sex='12'
    # print(obj.__dict__)
    
    # print(obj)
    
    # del obj
    # print('---main---')
    
    内置方法
  • 相关阅读:
    POJ 1703 Find them, Catch them
    POJ 2236 Wireless Network
    POJ 2010 Moo University
    POJ 2184 Cow Exhibition
    POJ 3280 Cheapest Palindrome
    POJ 3009 Curling 2.0
    POJ 3669 Meteor Shower
    POJ 2718 Smallest Difference
    POJ 3187 Backward Digit Sums
    POJ 3050 Hopscotch
  • 原文地址:https://www.cnblogs.com/Mryang123/p/8613163.html
Copyright © 2011-2022 走看看