反射getattr
@property 将类中的方法伪装成属性
与@property相关的俩个 @方法.setter 修改操作 @方法.deleter 删除一个property属性的时候会执行被deleter装饰的方法
在类的命名空间有什么:
静态属性,
方法(动态属性),
@property方法
类方法(@classmethod)
类方法的默认参数:cls,指的是调用这个方法的类名
类方法的调用方式:通过类名.类方法调用,本质就是方法
应用场景:如果你的整个方法中都没有用到对象命名空间中的名字,且你用到了类的命名空间中的名字(普通方法和property方法除外)
静态方法(@staticmethod,)
这个函数不需要默认参数self,cls
静态方法的调用方式:通过类名.方法调用,本质是函数
应用场景:函数在类中定义的时候,即类中函数
isinstance:判断对象与类直接的关系
判断这个对象是不是类的对象,这个类子类的对象
issubclass(a,b):判断类与类之间的关系,(ab都必须是类,否则报错)
判断这个类a是不是另一个类b的子类
反射 getattr
使用:getattr(变量名(命名空间),字符串(属于一个命名空间的变量名))
定义:反射 指使用字符串数据类型的变量名来获取这个变量的值
应用场景:
input:用户输入
文件:从文件中读出的字符串,想转换成变量的名字
网络:将网络传输的字符串转换成年糕变量的名字
反射类的变量:静态属性,类方法,静态方法
class Foo:
School = "oldboy"
County = "China"
Language = "Chiness"
@classmethod
def class_method(cls):
print(cls.School)
def name(self):
print("alex")
a = Foo()
while True:
ch = input(">>>>>>>>>:").strip()
if hasattr(a,ch): #has 判断对象中是否存在这个方法
getattr(a,ch)() #执行方法
反射对象中的变量:对象属性,普通方法
class Foo:
def __init__(self,name,age):
self.name = name
self.age = age
def eating(self):
print("%s is eating"%self.name)
a = Foo("lin",23)
if hasattr(a,"name"):
print(getattr(a, "name")) #lin is eating
getattr(a,"eating")() #lin is eating
反射文本中的变量
import sys
sys.modules[__name__] #反射本文件中的变量,固定使用这个命名空间
import sys #加载sys模块
a = 1
b = 2
name ="alex"
def hello():
print("hello word")
print(getattr(sys.modules[__name__], "a"))
getattr(sys.modules[__name__],"hello")()
hasattr (a,"b") 判断对象中有没有“b”这个方法,与getattr配合使用,防止报错
setattr (a,"b",c) 接受三个参数,命名空间,“变量名”,变量值
class Foo:
Country = "China"
def func():
print("hello world")
Foo.Shool = "old boy"
setattr(Foo,"teacher","alex") #Foo.Shool = "old boy"与他作用相同,都是给类中增加属性
print(Foo.__dict__) # 'Country': 'China','Shool': 'old boy', 'teacher': 'alex'等
delattr (a,"b") 删除命名空间中b这个属性,如果没有会报错
class Foo:
Country = "China"
def func():
print("hello world")
Foo.Shool = "old boy"
del Foo.Country
print(Foo.__dict__)
delattr(Foo,'Country') #del Foo.Country作用是一样的
print(Foo.__dict__)
反射getattr的更多相关文章
- 面向对象进阶----->反射 getattr 和hasattr方法
判断一个对象有没有血缘关系:isinstance() 里面写的是字类对象和父类名用来判断他们的关系 issubclass()是用来判断两个类是不是有继承的关系 ,括号内 写字类名和父类名 可以判断出 ...
- python day21 ——面向对像-反射 getattr,内置方法
一.反射:用字符串数据类型的变量名来访问这个变量的值 上代码^_^ # class Student: # ROLE = 'STUDENT' # @classmethod # def check_cou ...
- python全栈开发day23-面向对象高级:反射(getattr、hasattr、setattr、delattr)、__call__、__len__、__str__、__repr__、__hash__、__eq__、isinstance、issubclass
一.今日内容总结 1.反射 使用字符串数据类型的变量名来操作一个变量的值. #使用反射获取某个命名空间中的值, #需要 #有一个变量指向这个命名空间 #字符串数据类型的名字 #再使用getattr获取 ...
- 反射getattr,hasattr,setattr,delattr
通过字符串映射或修改程序运行时的状态.属性.方法, 有以下4个方法 getattr(object, name_str, default=None) 根据字符串name_str去获取obj对象里的方法内 ...
- Python笔记【7】_反射getattr&hasattr&setattr&delattr
Lesson0402_GetatrrWebsite.py #!/usr/bin/env/python #-*-coding:utf-8-*- #Author:LingChongShi #查看源码Ctr ...
- python中反射 getattr(对象,'方法')()和hasattr(对象,'方法')
getattr(对象,'方法')():从一个对象里面找到里面的方法,,, 传了一个对象,再传一个字符串,就能找到这个字符串的方法 hasattr(对象,'方法') 判断这个对象里面有没有这个方法,返回 ...
- python反射
python反射 python的反射是基于字符串的形式去对象(模块)中操作其成员.此操作是动态的,常用于web开发中url参数中对应模块或者函数的反射. 下面开始具体说明: 场景需求: 我的pytho ...
- python 异常 反射
异常 反射 一.异常处理: AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x IOError 输入/输出异常:基本上是无法打开文件 ImportError ...
- python 全栈开发,Day113(方法和函数的区别,yield,反射)
一.方法和函数的区别 面向对象 初级 class StarkConfig(object): def __init__(self,model_class): self.model_class = mod ...
随机推荐
- iOS 如何监听用户在手机设置里改变了系统的时间?
如何监听用户未退出APP但通过Home键在手机设置里改变了系统的时间? 用户虽未退出APP,但是当它按Home键退到后台时 ,会调用该方法: - (void)applicationDidEnterBa ...
- Java面向对象之各种变量详解
在Java中一定有很多变量让大家头疼,成员变量.类变量.局部变量等等,今天就来分别认识认识他们吧! Java面向对象之各种变量详解 前言 在 Java语言中, 根据定义变量位置的不同,可以将变量分成两 ...
- 32、python并发编程之背景知识
目录: 一 引子 二 为什么要有操作系统 三 什么是操作系统 四 操作系统与普通软件的区别 五 操作系统发展史 六 总结视频链接: 一 引子 顾名思义,进程即正在执行的一个过程.进程是对正在运行程序的 ...
- Solution -「集训队作业 2013」「洛谷 P4841」城市规划
\(\mathcal{Description}\) link. 求 \(n\) 个结点的简单无向连通图个数,对 \(1004535809~(479\times2^{21}+1)\) 取模. ...
- .NET 云原生架构师训练营(权限系统 代码实现 Store.EntityFramework)--学习笔记
目录 开发任务 代码实现 开发任务 DotNetNB.Security.Core:定义 core,models,Istore:实现 default memory store DotNetNB.Secu ...
- 学着去看开 你不是一个low程序员
http://www.cocoachina.com/programmer/20160627/16835.html 看完这篇文章 感谢作者
- 【C# 练习】通过ZoomGame这个案例加强对 反射 插件 特性的认识
游戏情景设定: 有一个游戏机,里面出现几种动物让儿童选择.选择完动物后,在输入数值让动物叫几次. 动物类型以插件的形势存在,可以外包给其他人开发,并提供了开发接口AnimalTool.SDK.dll. ...
- Oracle之单行函数(字符串函数/数字函数/转换函数/日期函数/通用函数)
虚拟表DUAL介绍: dual是一张虚拟表,只有一行一列,用来构成select的语法规则. Oracle的查询中,必须使用"select 列- from 表"的完整语法,当查询单行 ...
- 7.Flink实时项目之独立访客开发
1.架构说明 在上6节当中,我们已经完成了从ods层到dwd层的转换,包括日志数据和业务数据,下面我们开始做dwm层的任务. DWM 层主要服务 DWS,因为部分需求直接从 DWD 层到DWS 层中间 ...
- Docker入坑系列(一)
Docker入坑系列(一) 引用嘛,当然是来引用别人说的东西啦. Docker 是一个开源项目,诞生于 2013 年初,它基于 Google 公司推出的 Go 语言实现. 项目后来加入了 Linux ...