Python学习基础笔记六十二——反射2

news2024/9/22 15:31:10

1、

isinstanace(obj, cls)   # 检查是否obj是否是类cls的对象:

class Foo(object):
    pass


obj = Foo()

print(isinstance(obj, Foo))

结果返回:True。

issubclass(sub, super)    # 检查sub类是否是 super 类的派生类

class Foo(object):
    pass


class Bar(Foo):
    pass


print(issubclass(Bar, Foo))

结果返回为:True。

2、反射:

1)反射的概念是由smith在1982时首次提出,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)。这个概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在lisp和面向对象方面取得成就。

2)python面向对象中的反射:通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射)。

四个可以实现自省的函数:

name = 1
eval('print(name)')     # 安全隐患

使用反射,就没有安全问题。

3、反射对象的属性:

class A:
    def func(self):
        print('in func')


a = A()
a.name = 'alex'

ret = getattr(a, 'name')   # 通过变量名的字符串形式取到值
print(ret)

4、反射对象的方法:

class A:
    def func(self):
        print('in func')


a = A()
a.name = 'alex'

ret = getattr(a, 'func')
ret()

5、反射类的属性:

class A:
    price = 20
    @classmethod
    def func(cls):
        print('in func')


a = A()
a.name = 'alex'

ret = getattr(A, 'price')
print(ret)

ret2 = getattr(A, 'func')
ret2()

6、反射模块的属性,反射模块的方法:另外,内置模块也能用。

# my.py

day = 'Monday'    # 变量day

def wahaha():
    print('wahaha')
import my

ret = getattr(my, 'day')
print(ret)

ret2 = getattr(my, 'wahaha')
ret2()

7、反射自己模块的变量和方法:

import sys


def qqxing():
    print('qqxing')


year = 2023

print(getattr(sys.modules['__main__'], 'year'))
getattr(sys.modules['__main__'], 'qqxing')()

import sys


def qqxing():
    print('qqxing')


year = 2023

arg = input('>>>')
print(getattr(sys.modules['__main__'], arg))
# print(getattr(sys.modules['__main__'], 'year'))
# getattr(sys.modules['__main__'], 'qqxing')()

8、一个模块中的类能不能反射得到。

import my

print(getattr(my, 'C')())

9、setattr:设置修改变量

class A:
    pass

a = A()

setattr(a, 'name', 'chang')
setattr(A, 'name', 'alex')

print(A.name)
print(a.name)

10、delattr:删除一个变量

class A:
    pass

a = A()

setattr(a, 'name', 'chang')
setattr(A, 'name', 'alex')

print(A.name)
print(a.name)

delattr(a, 'name')
print(a.name)

结果:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/132662.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python详解(5)——类,类,还是类

目录 🏆一、前言 🏆二、类 🚩1、面向对象到底是什么 🚩2、数据成员and访问,汉堡店大升级(超难) 👍①、类变量(超难) 👍②、实例变量 &#x1f6a9…

A Latent Transformer for Disentangled Face Editing in Images and Videos翻译

点击下载论文 代码地址 图1 我们将真实图像投影到StyleGAN生成器的潜空间,并在编码的潜码上实现连续的解纠缠属性编辑。从原始图像和投影图像中,我们可以连续编辑一系列属性,例如:“微笑”、“刘海”、“拱形眉毛”、“年龄”、…

分布式对象存储设计原理

保存像图片、音视频这类大文件就是对象存储。不仅有很好的大文件读写性能,还可通过水平扩展实现近乎无限容量,并兼顾服务高可用、数据高可靠。 对象存储“全能”,主要因,对象存储是原生分布式存储系统,相对于MySQL、R…

[Linux]yum安装工具和vim编辑器

🥁作者: 华丞臧. 📕​​​​专栏:【LINUX】 各位读者老爷如果觉得博主写的不错,请诸位多多支持(点赞收藏关注)。如果有错误的地方,欢迎在评论区指出。 推荐一款刷题网站 👉 LeetCode刷题网站 文…

每日一问-ChapGPT-20230101-关于新年的规划

文章目录每日一问-ChapGPT系列起因每日一问-ChapGPT-20230101-关于新年的规划优秀的人,新年之初做哪些规划疫情时代,如何更好的保护好自己有哪些运动可以提升抵抗力冥想的具体实现步骤为什么制定了年度规划但往往完成不了如何克服看手机刷视频的习惯当日…

聊聊八卦,当年的顶流明星事件是如何把公司的缓存架构“击垮”的?

V-xin:ruyuan0330 获得600页原创精品文章汇总PDF 目录 一、为什么要用缓存集群二、20万用户同时访问一个热点缓存的问题三、基于流式计算技术的缓存热点自动发现四、动加载为JVM本地缓存五、限流熔断保护六、总结 一、为什么要用缓存集群 这篇文章,咱…

数值优化之基本概念

本文ppt来自深蓝学院《机器人中的数值优化》 目录 1 推荐书单 2 优化问题的基本范式 3 数值优化在机器人领域的应用 1 推荐书单 对于英语阅读有困难的同学可以看第一本书,对于最优化的介绍也是比较详细的。 这是第一本书的ppt链接最优化:建模、算法…

【LDF】线性判别函数(三)

松弛方法 学习准则 在感知函数准则中, 目标函数中采用了 −aTy-\mathbf{a}^T \mathbf{y}−aTy 的形式。实际上有很多其它准则也可以用于感知函数的学习。线性准则 Jp(a)∑y∈Y(−aTy)J_p(\mathbf{a})\sum_{\mathbf{y} \in Y}\left(-\mathbf{a}^T \mathbf{y}\right) Jp​(a)y∈…

MP中定义全局常量用于xml的判断

1.普通方式 mybatis-plus.configuration.variables.secretFilterSwitch0 yml的方式 mybatis: mapper-locations: classpath:mapper/*.xml type-aliases-package: com.demo configuration: variables: userId: 456132465 userName: 李四 配置完成后在代码…

NLP论文RoFormer(含源码)中文解读:具有旋转式位置嵌入的增强型transformer模型(一场相对革命)

目录 1、论文与源码2、摘要介绍3、展开解读3.1、匹配或超过了目前可用于将位置信息注入变换器的所有其他方法3.2、模型思想3.3、公式推导3.4、源码解释GPT-NeoX(PyTorch)网状变压器 JAX (JAX)4、 对比实验参考文献1、论文与源码 RoFormer匹配或超过了目前可用于将位置信息注…

分享76个PHP源码,总有一款适合您

链接:https://pan.baidu.com/s/1dC6_-CLs_qSyNnKEmno0Pg?pwd6666 提取码:6666 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下...,大家下载后可以看到。 UTForum社区论坛 v2.5 响应式健身房信息展…

小波分析—— 3. 实现一个简单的Haar小波

由于小波在应用形式上与卷积很相似,所以如果你有需要,可以查看我以前写过的内容: 信号采样基本概念 —— 冲激函数卷积计算——1. 关于卷积的基本概念卷积计算——2. 一些常用于图像的卷积核与应用 另外常见的信号处理工具,傅里…

Unity脚本(三)

视频教程:https://www.bilibili.com/video/BV12s411g7gU?p128 目录 Time Prefab Animation Time Time.time:自应用程序启动以来,每帧的开始时间(只读) Time.deltaTime:每帧间隔,或说完…

SpringData

文档:D:\springdata SpringData是一个用来简化dao层开发的框架.在保证了各个底层存储特性同时,提供了一套统一的数据访问API.它可以很好的支持常用的关系型数据库和非关系型数据库. 使用SpringData做为dao层开发技术,将大大简化代码,而且其API比各个技…

【力扣周赛#326】6279.数组乘积中的不同质因数数目+6196.将字符串分割成值不超过K的子字符串+6280.范围内最接近的两个质数

目录 6278.统计能整除数字的位数 - 简单ac 6279.数组乘积中的不同质因数数目 - 质因数 6196.将字符串分割成值不超过K的子字符串 - 贪心 6280.范围内最接近的两个质数 - 质数筛 贪心 6278.统计能整除数字的位数 - 简单ac 6278. 统计能整除数字的位数 class Solution {pu…

aws codebuild 配置codecommit更新触发和squid正向代理

本文主要讨论如何通过监听codecommit仓库自动触发codebuild的构建,以及为codebuild配置正向代理 通过codecommit更新触发codebuild codecommit触发器相关 每个codecommit最多配置10个触发器 sns触发器 为sns创建lambda函数订阅,在lambda日志中查看s…

一个例题,了解包装类

下列代码输出什么,为什么? public class Test3 {public static void main(String[] args) {Integer a1 100;Integer a2 Integer.valueOf(100);Integer a3 new Integer(100);System.out.println(a1 a2);System.out.println(a1 a3);System.out.println(a1.equals(a3));Sys…

分离编译、类型萃取、变参模板

分离编译 一个程序由若干个源文件共同实现,每个源文件单独编译生成目标文件,最后将所有的目标文件链接起来形成单一可执行文件的过程称之为分离编译模式。模板不支持分离编译 编译器报的这种错误属于链接性错误,也就是当程序预处理、编译、汇…

Sutherland–Hodgman 算法介绍(简单易懂)

目录 一、算法介绍 二、算法描述 三、计算细节补充 四、算法总结 一、算法介绍 我们使用Sutherland–Hodgman算法来裁剪多边形的边,一般是给你一个多边形顶点序列(P1,P2,P3,P4,…Pn)让你裁剪,最终裁剪掉裁剪多边形的外部部分(下图黑框就是裁剪多边形…

大中型政企机构网络安全建设发展趋势研究报告

声明 本文是学习大中型政企机构网络安全建设发展趋势研究报告. 下载地址而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 研究背景 大中型政企机构是网络安全保护的重中之重,也是国内网络安全建设投入最大,应用新技术、新产品最…