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系列的更多相关文章

  1. 内置方法(item系列)

    class Foo: def __init__(self,name): self.name = name def __getitem__(self, item): # 获取时触发 print('get ...

  2. python 面向对象之反射及内置方法

    面向对象之反射及内置方法 一.静态方法(staticmethod)和类方法(classmethod) 类方法:有个默认参数cls,并且可以直接用类名去调用,可以与类属性交互(也就是可以使用类属性) 静 ...

  3. Python反射和内置方法(双下方法)

    Python反射和内置方法(双下方法) 一.反射 什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发 ...

  4. 面向对象(五)——isinstance与issubclass、反射、内置方法

    isinstance与issubclass.反射.内置方法 一.isinstance与issubclass方法 1.isinstance是用来判断对象是否是某个类 isinstance(obj,cla ...

  5. 反射与内置方法str del

    1.反射 用字符串来操作类或者对象的属性 class People:# country= 'china'# def __init__(self,name):# self.name= name## de ...

  6. Learning-Python【26】:反射及内置方法

    反射的概念 可以用字符串的方式去访问对象的属性,调用对象的方法(但是不能去访问方法),Python 中一切皆对象,都可以使用反射. 反射有四种方法: hasattr:hasattr(object, n ...

  7. python面向对象 : 反射和内置方法

    一. 反射 1. isinstance()和issubclass() isinstance( 对象名, 类名) : 判断对象所属关系,包括父类  (注:type(对象名) is 类名 : 判断对象所属 ...

  8. Python之路(第二十五篇) 面向对象初级:反射、内置方法

    [TOC] 一.反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它 ...

  9. 27 isinstance与issubclass、反射、内置方法

    isinstance与issubclass issubclass:判断子类是否属于父类,是则返回True,否则返回False isinstance:判断对象是否属于类,是则返回True,否则返回Fal ...

随机推荐

  1. C. Queen Codeforces Round #549 (Div. 2) dfs

    C. Queen time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...

  2. centos7下安装docker(19容器架构)

    What,Why,How What:什么是容器? 说起容器大家想到的是什么?      集装箱(container),虚拟机,docker,k8s 1. 没毛病,因为容器与集装箱的英文都可以翻译成co ...

  3. centos7下安装docker(18.2docker日志---ELK)

    ELK是三个软件得组合:Elasticsearch,Logstash,Kibana Elasticsearch:实时查询的全文搜索引擎.Elasticsearch的设计目的就是能够处理和搜索巨量的日志 ...

  4. 第8章 java中的并发工具类

    8.1 等待线程完成的CountDownLatch 作用:让一个线程等待其余线程完成之后在继续执行,如主线程等待开启服务的子线程执行完毕后主线程继续执行,类似于join.

  5. memcache讲解和在.net中初使用

    memcache讲解和在.net中初使用 2017年10月17日 22:51:36 等待临界 阅读数:503   前言 传统数据库面临的问题 数据库死锁 磁盘IO 正文 了解memcache 原理 基 ...

  6. oracle sys_guid

    select sys_guid() from dual;

  7. Spring Security(十三):5.2 HttpSecurity

    Thus far our WebSecurityConfig only contains information about how to authenticate our users. How do ...

  8. CF962F Simple Cycles Edges

    CF962F Simple Cycles Edges 给定一个连通无向图,求有多少条边仅被包含在一个简单环内并输出 \(n,\ m\leq10^5\) tarjan 首先,一个连通块是一个环,当且仅当 ...

  9. Python协程(真才实学,想学的进来)

    真正有知识的人的成长过程,就像麦穗的成长过程:麦穗空的时候,麦子长得很快,麦穗骄傲地高高昂起,但是,麦穗成熟饱满时,它们开始谦虚,垂下麦芒. --蒙田<蒙田随笔全集> *** 上篇论述了关 ...

  10. 分享一个公众号h5裂变吸粉源码工具

    这次我是分享我本人制作的一个恶搞程序,说白了就是一个公众号裂变吸粉工具,市面上有很多引流方法,例如最常见的就是色流,哈哈,今天我跟大家分享的方法是有趣的,好玩的,恶搞的.这个程序上线一天已经收获了61 ...