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 ...
随机推荐
- React项目中那些奇怪的写法
1.在一个React组件里看到一个奇怪的写法: const {matchs} = this.props.matchs; 原来,是解构赋值,虽然听说过,但是看起来有点奇怪 下面做个实验: <scr ...
- 【Tars】腾讯微服务框架Tars介绍
目录 1.介绍2.设计思路3.整体架构4.平台特性1. 介绍 Tars是[基于名字服务][使用Tars协议]的高性能[RPC]开发框架,同时配套一体化的[服务治理平台],帮助个人或者企业快速的以微服务 ...
- 设计模式のVisitorPattern(访问者模式)----行为模式
一.产生背景 访问者模式是封装一些施加于某种数据结构之上的操作.一旦这些操作需要修改的话,接受这个操作的数据结构则可以保存不变.访问者模式适用于数据结构相对稳定的系统, 它把数据结构和作用于数据结构之 ...
- 7.02-bs4_btc
import requests from bs4 import BeautifulSoup from lxml import etree import json class BtcSpider(obj ...
- UVA1442-Cav(扫描法)
Problem UVA1442-Cav Accept: 185 Submit: 679Time Limit: 3000 mSec Problem Description Input The inpu ...
- 根据JavaBean创建数据库的操作SQL
根据JavaBean创建数据库的操作SQL import java.lang.reflect.Field; public class GenerateSQL { public static void ...
- pycharm 安装及使用
pycharm 的使用: IDE 集成开发环境(Integrated Development Environment) VIM 经典的Linux下的文本编辑器 EMACS: Linux文本编辑器,比v ...
- spring-config的坑
背景 1.修改配置中心读取配置文件的分支,配置了spring.cloud.config.label后,报错,异常大概是读取本地配置文件异常 解决 反复尝试了之后,发现是配置仓库的配置文件格式(yml) ...
- 20175330 实验二《Java面向对象程序设计》实验报告
一.前期准备:unit的安装与使用:打开idea,Preferences中点击Plugins,在market中搜索junit,如图点选JUnitGenerator V2.0进行安装,安装后会显示ins ...
- ASP.NET Core 判断请求是否为Ajax请求
我们可以通过HTTP请求头来判断是否为Ajax请求,Ajax请求的request headers里都会有一个key为x-requested-with,值为XMLHttpRequest的header 所 ...