Python3 从零单排20_方法(绑定&内置)&反射

  非绑定方法 没有自动传值的功能 @staticmethod  绑定方法  绑定给谁就给谁调用,调用时会自动将调用者作为第一个参数传递给函数  1.绑定到对象的方法(不被任何装饰器装饰的函数)   2.绑定到类的方法 @classmethod 装饰的函数
class A:
    def __init__(self, name):
        self.name = name

    def call(self):  # 绑定到对象的方法,对象调用时默认将调用者作为第一个参数自动传入,类也可调用,但只是作为一个普通函数给类用,不会自动传值。
        print("my name is %s" % self.name)

    @classmethod  # 绑定到类的方法,类调用时默认将调用者作为第一个参数自动传入,对象调用时默认将调用者所属的类作为第一个参数自动传入。
    def func_class(cls):  # 一般写成 cls 与绑定到对象时写的self做区分,两个功能其实是一样的
        print(cls)

    @staticmethod  # 类和对象都可以直接使用,当普通函数那样使用
    def cal(x, y):
        print(x+y)

a1 = A("xg")
# # 调用对象绑定方法
# a1.call()
# A.call(a1)
# # 调用类绑定方法
# A.func_class()
# a1.func_class()
# # 调用非绑定方法
# A.cal(1,2)
# a1.cal(1,2)
反射
# 对象的属性操作,实际做的增删改查就是操作对象的 __dict__属性字典 , 类的属性操作类似
# 判断是否含有属性
print(hasattr(a1, "name"))  # true
# 拿到属性值
print(getattr(a1, "name"))  # 当不存在该属性时,会报错
print(getattr(a1, "asd", None))  # 指定None,当不存在该属性时,不会报错
# 设置属性值
setattr(a1, "sex", "male")
print(getattr(a1, "sex", None))
# 删除属性
delattr(a1, "sex")
print(getattr(a1, "sex", None))

# 反射的应用  类似于功能分发
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]):
                func=getattr(self,cmds[0])
                func(cmds)

    def get(self,cmds):
        print(‘get.......‘,cmds)

    def put(self,cmds):
        print(‘put.......‘,cmds)

obj=Service()
obj.run()
内置方法:
# isinstance(obj,cls)检查是否obj是否是类 -cls 的对象
class Foo(object):
    pass
obj = Foo()
isinstance(obj, Foo)

# issubclass(sub, super)检查sub类是否是 super 类的派生类
class Foo(object):
    pass
class Bar(Foo):
    pass
issubclass(Bar, Foo)

# item 将对象变成一个字典形式
class A:
    def __init__(self, name):
        self.name = name

    def __getitem__(self, item):  # 当用字典形式查对象的属性时,会自动调用该方法
        print("getitem ....")
        return self.__dict__.get(item)

    def __setitem__(self, key, value):  # 当用字典形式设置对象的属性时,会自动调用该方法
        print("setitem ....")
        self.__dict__[key] = value

    def __delitem__(self, key):  # 当用字典形式删除对象的属性时,会自动调用该方法
        print("delitem ....")
        self.__dict__.pop(key)

a = A("xg")
print(a["name"])
a["sex"] = ‘male‘
print(a["sex"])
del a["sex"]
print(a["sex"])



原文地址:https://www.cnblogs.com/znyyy/p/10144632.html

时间: 2024-10-10 22:01:13

Python3 从零单排20_方法(绑定&内置)&反射的相关文章

JavaScript基础:BOM的常见内置方法和内置对象

本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. BOM的介绍 JavaScript的组成 JavaScript基础分为三个部分: ECMAScript:JavaScript的语法标准.包括变量.表达式.运算符.函数.if语句.for语句等. DOM:文档对象模型,操作网页上的元素的API.比如让盒子移动.变色.轮播图等. BOM:浏览器对象模型,操作浏览器部分功能的API.比如让浏览器自动滚动. 什么是BOM BOM

JavaScript---Bom树的操作,内置方法和内置对象(window对象,location对象,navigator对象,history对象,screen对象)

JavaScript---Bom树的操作,内置方法和内置对象(window对象,location对象,navigator对象,history对象,screen对象) 一丶什么是BOM ???????Bom:Browser Object Model,浏览器对象模型.操作浏览器部分的功能的API(事件/函数). 结构图: ???分析:1.window对象是Bom的顶层对象.所有的对象都是从windom延伸出来的,称其为window子对象. ?????? 2.dom是bom的一部分 ?????? 3.

【Python】Java程序员学习Python(四)— 内置方法和内置变量

<假如爱有天意> 当天边那颗星出现,你可知我又开始想念,有多少爱恋只能遥遥相望,就像月光洒向海面,年少的我们曾以为,相爱的人就能到永远,当我们相信情到深处在一起,听不见风中的叹息,谁知道爱是什么,短暂的相遇却念念不忘,用尽一生的时间,竟学不会遗忘,如今我们已天各一方,生活的像周围人一样,眼前人给我最信任的依赖,但愿你被温柔对待,多少恍惚的时候,仿佛看见你在人海川流,隐约中你已浮现,一转眼又不见,短暂的相遇却念念不忘,多少恍惚的时候,仿佛看见你在人海川流,隐约中你已浮现,一转眼又不见,当天边那颗

Python中类的属性、方法及内置方法

1.类的属性 成员变量 对象的创建 创建对象的过程称之为实例化,当一个对象被创建后,包含三个方面的特性对象聚丙属性和方法, 句柄用于区分不同的对象, 对象的属性和方法,与类中的成员变量和成员函数对应, obj = MyClass()创建类的一个实例,扩号对象,通过对象来调用方法和属性 类的属性 类的属性按使用范围分为公有属性和私有属性类的属性范围,取决于属性的名称, **共有属性**---在内中和内外都能够调用的属性 **私有属性**---不能在内外贝类以外函数调用 定义方式:以"__"

Python3 从零单排2_文件读写

文件操作其实和我们日常处理文件一样的,先打开文件,然后操作,最后保存关闭,在python里就是这三步骤: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件 文件操作有以下三个模式: r:读模式[可读: 不可写,不存在则报错] w:写模式[不可读:不存在则创建:存在则删除内容] //注意:只要写了w模式,不论后面跟的啥,文件不存在则创建,存在则清空文件内容,然后再写. a:追加模式[不可读: 不存在则创建:存在则只追加内容]//注意:追加内容是在最后的指针位

Python3 从零单排29_协程

1.并发的本质:切换+保存状态 cpu正在运行一个任务,会在两种情况下切走去执行其他的任务(切换由操作系统强制控制) 1.该任务发生了阻塞 2.该任务计算的时间过长或有一个优先级更高的程序替代了它 第二种情况并不能提升效率,只是为了让cpu能够雨露均沾,实现看起来所有任务都被"同时"执行的效果,如果多个任务都是纯计算的,这种切换反而会降低效率. yield本身就是一种在单线程下可以保存任务运行状态的方法: 1 yield可以保存状态,yield的状态保存与操作系统的保存线程状态很像,但

Python3 从零单排_一些好玩的东西

这里介绍四个: 1.实现进度条 2.深浅拷贝 3.三元运算 4.format 格式化传字典 1 #进度条 2 import time 3 for i in range(10): 4 time.sleep(1) 5 print('*',end='',flush=True) 6 # end默认参数是'\n',所以没有传值的话是默认换行的: 7 # flush在这里的意义是循环一次打印一次,默认参数是'False',如果指定为True,这里会10秒后一起打印10个* 8 # 现在上述代码打印结果为每秒

Python3 从零单排28_线程队列&amp;进程池&amp;线程池

1.线程队列 线程队列有三种:先进先出,后进先出,按优先级进出,具体如下: 1 import queue 2 3 # 先进先出 4 q = queue.Queue(3) 5 6 q.put(1) 7 q.put(2) 8 q.put(3) 9 # q.put(4) # 再放阻塞,等待队列消费 10 # q.put(4,block = False) # 不阻塞,强制放数据,如果满的情况下直接报错 等价与 q.put_nowait(4) 11 # q.put(4,block = True) # 阻塞

第三篇、内置方法

一. 作用域 只要在内存里面存在,则就能使用.(栈) 外层变量,可以被内层变量使用 内层变量,无法被外层变量使用 上面这两句话对吗? 答案:是不对的 如: If 1==1: Name = 'alex' Print name 判断如下:能打印出来吗? Name = {"ns",123} For item in name: Print item Print item 为什么不能打印出来的原因: 理解1: 变量都是指向了内存地址,而item这个内存地址,没有变量指向所以不能被打印 二 .三元