python反射

python 反射、动态导入

雨燕双飞 提交于 2020-04-08 06:34:36
1. 反射 hasattr(obj,'name') # 判断对象中是否含有字符串形式的方法名或属性名,返回True、False getattr(obj,'name',None) # 返回对象中的方法或属性: obj.name,如果没有此方法或属性,返回None setattr(obj,'name',value) # 设置对象中方法或属性的值: obj.name = value delattr(obj,'name') # 删除对象中的方法或属性 class A(object): age = 22 def __init__(self,name): self.name = name def getname(self): print(self.name) a = A('wang') print(hasattr(a,'age')) # True 判断对象中是否有字符串形式的方法或属性名字。 setattr(a,'sex','man') # 给a对象设置一个属性:sex = 'man' print(a.sex) func = getattr(a,'getname',None) # 获取a对象的一个方法:getname;如果没有这个方法,则为None func() delattr(a,'name') # 删除a对象的age属性 try: print(a.name) except: print(

Python面向对象反射,双下方法

情到浓时终转凉″ 提交于 2020-04-02 23:30:34
一. 反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。 python面向对象中的反射:通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射) 四个可以实现自省的函数 下列方法适用于类和对象(一切皆对象,类本身也是一个对象) 对实例化对象的示例 class Foo: f = '类的静态变量' def __init__(self,name,age): self.name=name self.age=age def say_hi(self): print('hi,%s'%self.name) obj=Foo('egon',73) #检测是否含有某属性 print(hasattr(obj,'name')) print(hasattr(obj,'say_hi')) #获取属性 n=getattr(obj,'name') print(n) func=getattr(obj,'say_hi') func() print(getattr(obj,'aaaaaaaa','不存在啊')) #报错 #设置属性 setattr(obj,'sb',True) setattr

Python-反射机制

早过忘川 提交于 2020-03-26 23:49:03
一、python-反射机制   目录     1、反射基本方法     2、反射demo 二、   1、hasattr(obj,name_str) #判断一个对象obj里是否有对应的字符串的方法    getattr(obj,name_str) # 根据字符串去获取obj对象里的对应的内存地址, 字符串是 变量则返回值   setattr(obj,'y','z') #根据字符串设置属性(方法,变量)   delattr(obj,name_str) 删除 2、demo class Dog(object): def __init__(self,name): self.name=name def eat(self,food): print('%s 开始吃'%self.name,food) def bulk(self): print('1233 %s' %self.name) d=Dog('李富贵') chaer=input('输入:').strip() if hasattr(d,chaer): #func=getattr(d,chaer) #func('包子') setattr(d,chaer,'雷') #修改原来变量的内容 print(getattr(d, chaer)) delattr(d,chaer) #删除 print(d.name) else: setattr(d,chaer

模块与包

☆樱花仙子☆ 提交于 2020-03-19 01:25:40
模块   一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。   其实import加载的模块分为四个通用类别:    1 使用python编写的代码(.py文件)   2 已被编译为共享库或DLL的C或C++扩展   3 包好一组模块的包   4 使用C编写并链接到python解释器的内置模块   引入导入模块的概念   退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,需要时就通过python test.py方式去执行,此时test.py被称为脚本script。   随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样做程序的结构更清晰,方便管理。这时我们不仅仅可以把这些文件当做脚本去执行,还可以把他们当做模块来导入到其他的模块中,实现了功能的重复利用。   导入模块   import   现在有一个spam.py的文件。 #spam.py print('from the spam.py') money=1000 def read1(): print('spam->read1->money',money) def read2(): print('spam->read2 calling read') read1() def change():

python 全栈开发,Day23(复习,isinstance和issubclass,反射)

岁酱吖の 提交于 2020-03-18 02:06:17
一、复习 class A: def func1(self):pass def func2(self): pass def func3(self): pass a = A() b = A() print(A.func1) print(a.func1) print(b.func1) 执行输出: <function A.func1 at 0x00000286A24EAA60> <bound method A.func1 of <__main__.A object at 0x00000286A2381048>> <bound method A.func1 of <__main__.A object at 0x00000286A2381358>> bound 表示绑定的意思。当类A实例化时,会将里面的方法与做类做绑定。 class A: def func1(self):pass # 对象与方法之间的绑定 @classmethod def func2(self): pass # 类与方法之间的绑定 @classmethod def func3(self): pass a = A() b = A() #普通方法 对象和类绑定的过程 print(A.func2) print(a.func2) # 对象能找到类 类里面绑着方法 print(b.func2) 执行输出: <bound method A

python运维开发之第七天

时光毁灭记忆、已成空白 提交于 2020-03-17 09:09:21
一、面向对象编程进阶 1、静态方法   @staticmethod   名义上归类管理,实际上跟类没什么关系   在静态方法里,访问不了类或实例中的任何属性 class Static_method(object): def __init__(self,name): #构造函数,初始化实例变量 self.name = name @staticmethod #静态方法调用 def eat(self,name): #归属于类管理,实际上跟类没什么关系 print("%s is eating"% name) print('可以调用self本身名字%s'% self.name) d = Static_method('xiaowang') #定义一个实例 d.eat(d,'xiaohan') #调用self方法时,必须传实例本身作为参数 静态方法 xiaohan is eating 可以调用self本身名字xiaowang 结果 2、类方法   @classmethod   只能访问类变量,不能访问实例变量 class Class_method(object): class_name = 'xiaohan' #类变量 def __init__(self,name): #构造函数,初始化实例变量 self.name = name #实例变量 @classmethod #类方法调用 def eat

Python基础之面对对象进阶

痴心易碎 提交于 2020-03-13 11:32:47
阅读目录 isinstance和issubclass 反射 setattr delattr getattr hasattr __str__和__repr__ __del__ item系列 __getitem__ __setitem__ __delitem__ __new__ __call__ __len__ __hash__ __eq__ 回到顶部 isinstance和issubclass 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) 回到顶部 反射 1 什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。 2 python面向对象中的反射:通过字符串的形式操作对象相关的属性。python中的一切事物都是对象

Python基础第十六天:面向对象进阶

怎甘沉沦 提交于 2020-03-13 11:32:29
目录   isinstance 和 issubclass   反射     setattr     delattr     getattr     hasattr   __str__ 和 __repr__   __del__   item系类     __getiem__     __setitem__     __delitem__   __new__   __call__   __len__   __hash__   __eq__   isinstance 和 issubclass    isinstance(obj,cls) 检查是否 obj 是否是类 cls 对象 class Foo(object): pass obj = Foo() print(isinstance(obj,Foo)) #True   issubclass(sub,super) 检查sub类是否是supper类的派生类 class Foo(object): pass class Bar(Foo): pass print(issubclass(Bar,Foo)) #True   反射   1、什么是反射    反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检查和修改它本身状态或行为的一种能力(自省),这一概念的提出很快引发了计算机科学领域关于应用反射性的研究

python基础之类的isinstance与issubclass、反射

有些话、适合烂在心里 提交于 2020-03-13 05:47:27
一 isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo: pass obj = Foo() print(isinstance(obj,Foo)) issubclass(sub, super)检查sub类是否是 super 类的派生类 class Foo: pass class Bar(Foo): pass print(issubclass(Bar,Foo)) 二 反射 1、什么是反射 主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)。 2、python面向对象中的反射:通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射) 基于对象级别的反射 基于类级别的反射 基于模块级别的反射 四个可以实现自省的函数: def hasattr(*args, **kwargs): # real signature unknown """ Return whether the object has an attribute with the given name. This is done by calling getattr(obj, name) and catching AttributeError. """ pass

django基础篇

一笑奈何 提交于 2020-03-06 06:45:19
Python的WEB框架有Django、Tornado、Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM、模型绑定、模板引擎、缓存、Session等诸多功能。 一、基本的配置 1、创建django程序 终端命令:django-admin startproject sitename IDE创建Django程序时,本质上都是自动执行上述命令 其他常用命令:   python manage.py runserver 0.0.0.0   python manage.py startapp appname   python manage.py syncdb   python manage.py makemigrations   python manage.py migrate   python manage.py createsuperuser 2、程序目录 3、配置文件 数据库 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME':'dbname', 'USER': 'root', 'PASSWORD': 'xxx', 'HOST': '', 'PORT': '', } } # 由于Django内部连接MySQL时使用的是MySQLdb模块