Day 5-6 反射和内置方法之item系列
python面向对象中的反射:通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射)
#!_*_ coding:utf-8 _*_ class People:
def __init__(self, name, age):
self.name = name
self.age = age def talk(self):
print("%s is talking" % self.name) p = People("Jack",20) print(hasattr(p,"name")) # 判断对象p中有没有name属性 p.__dict__["name"]
print(p.__dict__["name"]) print(getattr(p, "age", None)) # 获取对象中age的值
print(getattr(p, "age11", None)) # 不存在会返回None setattr(p,"sex", "男") #可以在修改和新增
print(p.sex) delattr(p, 'age')
print(p.__dict__) # {'name': 'Jack', 'sex': '男'} age已经被删除了
反射的应用:
# #!_*_ coding:utf-8 _*_
#
# class People:
# def __init__(self, name, age):
# self.name = name
# self.age = age
#
# def talk(self):
# print("%s is talking" % self.name)
#
#
# p = People("Jack",20)
#
# print(hasattr(p,"name")) # 判断对象p中有没有name属性 p.__dict__["name"]
# print(p.__dict__["name"])
#
# print(getattr(p, "age", None)) # 获取对象中age的值
# print(getattr(p, "age11", None)) # 不存在会返回None
#
# setattr(p,"sex", "男") #可以在修改和新增
# print(p.sex)
#
# delattr(p, 'age')
# print(p.__dict__) # {'name': 'Jack', 'sex': '男'} age已经被删除了
#
#
# 反射的应用.模拟用户输入一些命令,让程序去调用这些命令.
# class Service:
# def run(self):
# while True:
# # inp = input(">>>>:").strip() #正常输入一个命令,判断在类中有没有这样一个属性方法.如果有就去执行.
# inp = input(">>>>:").strip()
# if hasattr(self,inp):
# func = getattr(self,inp)
# func()
# elif inp == "b":
# break
# else:
# print("input error")
#
#
#
# def get(self):
# print("get.....")
#
#
# def put(self):
# print("put.....")
class Service:
def run(self):
while True:
# inp = input(">>>>:").strip() #正常输入一个命令,判断在类中有没有这样一个属性方法.如果有就去执行.
inp = input(">>>>:").strip()
cmds = inp.split() # 用户传入get b.txt 这样的命令,进行分割
print(cmds)
if hasattr(self,cmds[0]):
func = getattr(self,cmds[0])
func(cmds)
elif inp == "b":
break
else:
print("input error") def get(self,cmds):
print("get.....", cmds) def put(self,cmds):
print("put.....",cmds) obj = Service() obj.run()
__setitem__,__getitem,__delitem__
class Foo: def __init__(self, name, age):
self.name = name
self.age = age def __getitem__(self, item):
return self.__dict__.get(item) def __setitem__(self, key, value):
self.__dict__[key] = value # 新增或者修改对象的字典. def __delitem__(self, key):
# self.__dict__.pop(key) # 删除相应的键值对
del self.__dict__[key] # 两种删除方法. obj = Foo("Jack",19)
# 查看.如果我们使用["str"]的方式来取值时,总是会调用__getitem__方法.
print(obj["age"]) #
print(obj["name"]) # Jack
# 新增或修改.调用的是___setitem__的方法.
obj["sex"] = "男"
obj["age"] = 20
print(obj.__dict__) # {'name': 'Jack', 'age': 20, 'sex': '男'}
print(obj["sex"]) # 男
# 删除.调用__delitem__方法
del obj["age"]
print(obj.__dict__) # 删除后,__dict__中已经没有age这个键值对了.{'name': 'Jack', 'sex': '男'}
__str__方法
作用:使用print方法打印对象时,可以通过__str__方法,把内容显示出来.
# __str__方法 class People: def __init__(self, name, age):
self.name = name
self.age = age def __str__(self): #__str__方法,会在print(obj)对象的时候,会被调用.返回的必须是一个字符串形式的内容.否则报错.
data = {
"name":self.name,
"age":self.age } return str(data) # 把字典转成字符串格式.否则报错. p1 = People("Jack", 19)
print(p1) # 调用的是__str__方法.等价于print(p1.__str__())
__del__方法
作用:在python程序运行结束之前,把调用的操作系统的资源回收掉.(清空)
class Open: def __init__(self,filename):
self.filename = filename
print("Open file.....") def __del__(self):
print("系统回收资源中.....") f = Open("1.txt") print("pro is end") # 程序执行到这里的时候,接下来会执行__del__方法,回收掉py调用的操作系统的资源.
__new__方法:
class People(object): def __init__(self):
print("__init__") def __new__(cls, *args, **kwargs): #__new__是创建实例的方法,而__init__则是创建后,调用的方法.
print("__new__")
return object.__new__(cls, *args, **kwargs) People()
#__new__
#__init__
Day 5-6 反射和内置方法之item系列的更多相关文章
- 内置方法(item系列)
class Foo: def __init__(self,name): self.name = name def __getitem__(self, item): # 获取时触发 print('get ...
- python 面向对象之反射及内置方法
面向对象之反射及内置方法 一.静态方法(staticmethod)和类方法(classmethod) 类方法:有个默认参数cls,并且可以直接用类名去调用,可以与类属性交互(也就是可以使用类属性) 静 ...
- Python反射和内置方法(双下方法)
Python反射和内置方法(双下方法) 一.反射 什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发 ...
- 面向对象(五)——isinstance与issubclass、反射、内置方法
isinstance与issubclass.反射.内置方法 一.isinstance与issubclass方法 1.isinstance是用来判断对象是否是某个类 isinstance(obj,cla ...
- 反射与内置方法str del
1.反射 用字符串来操作类或者对象的属性 class People:# country= 'china'# def __init__(self,name):# self.name= name## de ...
- Learning-Python【26】:反射及内置方法
反射的概念 可以用字符串的方式去访问对象的属性,调用对象的方法(但是不能去访问方法),Python 中一切皆对象,都可以使用反射. 反射有四种方法: hasattr:hasattr(object, n ...
- python面向对象 : 反射和内置方法
一. 反射 1. isinstance()和issubclass() isinstance( 对象名, 类名) : 判断对象所属关系,包括父类 (注:type(对象名) is 类名 : 判断对象所属 ...
- Python之路(第二十五篇) 面向对象初级:反射、内置方法
[TOC] 一.反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它 ...
- 27 isinstance与issubclass、反射、内置方法
isinstance与issubclass issubclass:判断子类是否属于父类,是则返回True,否则返回False isinstance:判断对象是否属于类,是则返回True,否则返回Fal ...
随机推荐
- centos7下安装docker(18.2docker日志---ELK)
ELK是三个软件得组合:Elasticsearch,Logstash,Kibana Elasticsearch:实时查询的全文搜索引擎.Elasticsearch的设计目的就是能够处理和搜索巨量的日志 ...
- nginx作为负载均衡服务器,tomcat作为应用服务器
1 如果想用一台主机,能够部署多个站点,并且访问每个站点都要求是在80端口,可以采用nginx+tomcat的方式 需要注意的是,tomcat一定不要监听80端口. 可以将静态资源配置在nginx ...
- 如何用chrome扩展将网页变成黑底白字,用以保护视力
不知道有没有科学依据,自己感觉黑底白字对视力好些,于是动手加个chrome扩展: 第一步:建个文件夹,名称比如叫changeColor; 第二步:在changeColor文件夹中建三个文件:manif ...
- @property和@score.setter的用法
@property 把属性装饰成get方法 给属性赋值时,会自动调用@property装饰的方法 只设置属性的@property 时,属性为只读 @score.setter 把属性装饰成set方法 给 ...
- SpringBoot系列 - 集成JWT实现接口权限认证
会飞的污熊 2018-01-22 16173 阅读 spring jwt springboot RESTful API认证方式 一般来讲,对于RESTful API都会有认证(Authenticati ...
- AppCan10个超实用的APP必备插件,让你少敲80%代码
一个APP的需求来自于哪儿?产品.老板.客户….. 做程序员不容易,需求一句话,就是几千几万行代码!所幸,在AppCan平台开发APP,开发者只需完成应用的前端部分,至于各项复杂的功能,就交给AppC ...
- 三.js实例
1.完成一个双色球,红球的自选效果 规则:1-33 用表格画出一个1到33的格子,点击一个自选按钮,将随机选中6个数字,每个表格对应的数字的背景就改为一个红球的效果 双色球.html <!DOC ...
- day25 Python四个可以实现自省的函数,反射
python面向对象中的反射:通过字符串的形式操作对象相关的属性.python中的一切事物都是对象(都可以使用反射) 四个可以实现自省的函数 下列方法适用于类和对象(一切皆对象,类本身也是一个对象) ...
- Spring Security(九):2.4.4 Checking out the Source(检查来源)
Since Spring Security is an Open Source project, we’d strongly encourage you to check out the source ...
- 操作循环的关键字switch,break,return的应用及区别
break 使用break结束循环 break可以终止循环 和 switch语句的运行; break用于结束一个循环,即跳出循环体,执行循环体之后的代码: switch 使用continue提前结束 ...