反射hasattr; getattr; setattr; delattr
hasattr(obj,name_str):#判断一个对象obj里面是否有对应的name_str字符串的方法,返回True或者False
getattr(obj,name_str):#根据字符串去获取对象里的对应方法的内存地址。
class Dog(object):
def __init__(self,name):
self.name = name
def eat(self,food):
print('%s eating...:%s' %(self.name,food))
def talk(self):
print('%s talk 汪汪汪~!'% self.name)
d = Dog('NiuhanYang')
chose = input('想让狗干什么:\n\t\t>>:')
# print(hasattr(d,chose))
if hasattr(d,chose):#判断一个对象obj里面是否有对应的name_str字符串的方法,返回True或者False
# getattr(d,chose)('粑粑')
func = getattr(d,chose) #根据字符串去获取对象里的对应方法的内存地址。
# func('粑粑')
func()
hasattr和getattr代码实例
setattr(obj,'y',v) #根据字符串y,去设置一个obj的一个y属性或y方法;v就是y的值(内存地址)
class Dog(object):
def __init__(self,name):
self.name = name
def eat(self,food):
print('%s eating...:%s' %(self.name,food)) d = Dog('NiuhanYang')
chose = input('想让狗干什么:\n\t\t>>:')
# print(hasattr(d,chose))
if hasattr(d,chose):#判断一个对象obj里面是否有对应的name_str字符串的方法,返回True或者False
# getattr(d,chose)('粑粑')
func = getattr(d,chose) #根据字符串去获取对象里的对应方法的内存地址。
func('粑粑')
# func()
else:
setattr(d,chose,22) #假定 chose输入的为age,d对象中的类中没有这个方法或者属性,就给他赋值22
print(d.age)
setattr
想让狗干什么:
>>:age
22
输出
delattr(obj,'str') #根据字符串‘str’去删除obj中的这个方法或者属性
class Dog(object):
def __init__(self,name):
self.name = name
def eat(self,food):
print('%s eating...:%s' %(self.name,food)) d = Dog('NiuhanYang')
chose = input('想让狗干什么:\n\t\t>>:')
# print(hasattr(d,chose))
if hasattr(d,chose):#判断一个对象obj里面是否有对应的name_str字符串的方法,返回True或者False
# getattr(d,chose)('粑粑')
func = getattr(d,chose) #根据字符串去获取对象里的对应方法的内存地址。
func('粑粑')
# func()
else:
setattr(d,chose,22) #假定 chose输入的为age,d对象中的类中没有这个方法或者属性,就给他赋值22
print(d.age)
delattr(d,chose)
print(d.age)
示例代码
想让狗干什么:
>>:age
22
Traceback (most recent call last):
File "C:/Users/Administrator/Desktop/Python3_study/day6/反射.py", line 23, in <module>
print(d.age)
AttributeError: 'Dog' object has no attribute 'age'
示例代码输出
反射hasattr; getattr; setattr; delattr的更多相关文章
- isinstance/type/issubclass的用法,反射(hasattr,getattr,setattr,delattr)
6.23 自我总结 面向对象的高阶 1.isinstance/type/issubclass 1.type 显示对象的类,但是不会显示他的父类 2.isinstance 会显示的对象的类,也会去找对象 ...
- python反射hasattr getattr setattr delattr
反射 : 是用字符串类型的名字 去操作 变量 相比于用eval('print(name)') 留有 安全隐患 反射 就没有安全问题 hasattr 语法: hasattr(object, name)o ...
- python 内置函数的补充 isinstance,issubclass, hasattr ,getattr, setattr, delattr,str,del 用法,以及元类
isinstance 是 python中的内置函数 , isinstance()用来判断一个函数是不是一个类型 issubclass 是python 中的内置函数, 用来一个类A是不是另外一个 ...
- Python hasattr,getattr,setattr,delattr
#!/usr/bin/env python # -*- coding:utf-8 -*- # 作者:Presley # 邮箱:1209989516@qq.com # 时间:2018-11-04 # 反 ...
- hasattr getattr setattr delattr --> (反射)
class Room: def __init__(self,name): self.name = name def big_room(self): print('bigroot') R = Room( ...
- python动态函数hasattr,getattr,setattr,delattr
hasattr(object,name) hasattr用来判断对象中是否有name属性或者name方法,如果有,染回true,否则返回false class attr(): def fun( ...
- 反射(hasattr , getattr, setattr) 输入的字符串用来运行程序
当用户输入字符串时,不能够用来运行程序 1.使用 hasattr 找出输入的字符串是否在程序内 2.使用 getattr 返回找出字符串对应的函数的内存地址或者变量 3. 使用setattr 添加新的 ...
- Python类总结-反射及getattr,setattr
类反射的四个基本函数 hasattr getattr setattr delattr #反射 class BlackMedium: feature = 'Ugly' def __init__(self ...
- Python的getattr(),setattr(),delattr(),hasattr()及类内建__getattr__应用
@Python的getattr(),setattr(),delattr(),hasattr() 先转一篇博文,参考.最后再给出一个例子 getattr()函数是Python自省的核心函数,具体使用大体 ...
随机推荐
- 撸了一个可调试 gRPC 的 GUI 客户端
前言 平时大家写完 gRPC 接口后是如何测试的?往往有以下几个方法: 写单测代码,自己模拟客户端测试. 可以搭一个 gRPC-Gateway 服务,这样就可以在 postman 中进行模拟. 但这两 ...
- Redis线程模型的前世今生
一.概述 众所周知,Redis是一个高性能的数据存储框架,在高并发的系统设计中,Redis也是一个比较关键的组件,是我们提升系统性能的一大利器.深入去理解Redis高性能的原理显得越发重要,当然Red ...
- Java二次开发海康SDK-对接门禁机
写在最前 SDK版本:CH-HCNetSDKV6.1.6.45_build20210302_win64 参考文档:海康SDK使用手册_V6.1 对接测试设备型号:DS-K1T671M 设备序列号:E5 ...
- 『MdOI R1』Treequery
我们可以思考怎么做呢. 首先我们需要进行一些分类讨论: 我们先思考一下如果所有关键点都在 \(p\) 的子树内, 那显然是所有关键点的 \(Lca\) 到 \(p\) 距离. 如果所有关键点一些在 \ ...
- perl FileHandle 模块使用
打开多个文件时必备啊 1 use FileHandle; 2 3 my (%index,%fh); 4 # 创建句柄,这里利用gzip 压缩下 5 foreach my $k(keys %index) ...
- rabbitmq部署问题
启动rabbitmq服务时报错: systemctl status rabbitmq-server 状态显示:Failed to start RabbitMQ broker Failed to sta ...
- Excel-姓名列中同一个人汇总金额列,得出总金额
8.姓名列中同一个人求和金额列,得出总金额. 方法一: P2处公式=SUMPRODUCT(($M$2:$M$20=$M2)*($N$2:$N$20)) 解释函数: 引用:https://zhinan. ...
- 给lua_close实现回调函数
先讲下为什么会需要lua_close回调吧. 我用C++给lua写过不少库,其中有一些,是C++依赖堆内存,并且是每一个lua对象使用一块单独的内存来使用的. 在之前,我一直都是魔改lua源代码,给l ...
- 【leetcode】653. Two Sum IV - Input is a BST
Given the root of a Binary Search Tree and a target number k, return true if there exist two element ...
- 2019广东工业大学新生杯决赛 I-迷途的怪物
题目:I-I-迷途的怪物_2019年广东工业大学腾讯杯新生程序设计竞赛(同步赛) (nowcoder.com) 将(p-1)^n 按照多项式定理拆开,会发现只有一项没有p,其余项都有p,可直接约掉. ...