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 ...
随机推荐
- linux学习笔记整理(八)
第九章 文件的归档和压缩本节所讲内容:9.1 tar命令进行文件的归档和压缩9.2 zip管理压缩文件9.3 了解gzip-bzip2- xz管理压缩文件-file-sort查看文件 9.1 tar命 ...
- UVA1646-Edge Case(递推+斐波那契数列)
Problem UVA1646-Edge Case Time Limit: 3000 mSec Problem Description Input For each test case, you ge ...
- UVA12627-Erratic Expansion(递归)
Problem UVA12627-Erratic Expansion Accept: 465 Submit: 2487Time Limit: 3000 mSec Problem Descriptio ...
- [matlab] 12.Optimization Tool的使用
1.quadprog 二次规划的函数 Matlab 中二次规划的数学模型可表述如下 其中 H是把目标函数二次项部分进行实对称矩阵, f是线性函数的列向量. 例求解二次规划 得到 h=[4,-4;-4, ...
- hadoop学习笔记贰 --HDFS及YARN的启动
1.初始化HDFS :hadoop namenode -format 看到如下字样,说明初始化成功. 启动HDFS,start-dfs.sh 终于启动成功了,原来是core-site.xml 中配置 ...
- IDEA+控制台使用搜索\查找功能
- # 20175329 2018-2019-2 《Java程序设计》第二周学习总结
# 学号 2018-2019-3<Java程序设计>第三周学习总结 ## 教材学习内容总结 第二三章与我们所学习的C语言有很多的相似点,在这里我想主要就以我所学习的效果来讨论一下JAVA与 ...
- face detection[S^3FD]
本文来自<\(S^3\)FD: Single Shot Scale-invariant Face Detector>,时间线为2017年11月. 0 引言 基于锚的目标检测方法,是通过分类 ...
- DIV CSS float浮动
一.浮动? #CSS样式的float浮动属性,用于设置标签对象(如:<div>标签盒子.<span>.<a>.等html标签)的浮动布局. #通过定义浮动(floa ...
- IntelliJ IDEA(四) :Settings(上)
前言 IDEA是一个智能开发工具,每个开发者的使用习惯不同,如何个性化自己的IDEA?我们可以通过Settings功能来设置.Settings文件是IDEA的配置文件,通过他可以设置主题,项目,插件, ...