Day8 面向对象反射 item方法 打印对象信息__str__ 构析方法__del__ 程序的异常处理
反射:通过字符串来访问到所对应的值(反射到真实的属性上)。
eg:
class Foo:
x=1
def __init__(self,name):
self.name=name def f1(self):
print('from f1') # print(Foo.x) #Foo.__dict__['x'] f=Foo('egon')
# print(f.__dict__)
#
# #1:
# print(f.name) #2:
# print(f.__dict__['name']) #hasattr
#反射到字典所对应的值
# print(hasattr(f,'name')) #f.name
# print(hasattr(f,'f1')) #f.f1
# print(hasattr(f,'x')) #f.x #setattr
#设置某个属性
# setattr(f,'age',18)#f.age=18 #getattr
#得到某个属性的值
# print(getattr(f,'name'))#f.name
# print(getattr(f,'abc',None))#f.abc
# print(getattr(f,'name',None))#f.abc # func=getattr(f,'f1')#f.f1
# print(func)
# func()
# #delattr
#删除某个属性的值
# delattr(f,'name')# del f.name
# print(f.__dict__)
定义某个功能,输入某条命令,打印下面的功能:
class Ftpserver:
def __init__(self,host,port):
self.host=host
self.port=port def run(self):
while True:
cmd=input('>>: ').strip()
if not cmd:continue
if hasattr(self,cmd):
func=getattr(self,cmd)
func()
def get(self):
print('get func') def put(self):
print('put func')
item系列:
当触发某些属性的时候,执行某些操作。
1 class Foo:
2 def __getitem__(self, item):
3 print('=====>get')
4 return self.__dict__[item] #执行你想要的操作
5
6 def __setitem__(self, key, value):
7 self.__dict__[key]=value
8 # setattr(self,key,value) #执行你想要的操作
9
10 def __delitem__(self, key):
11 self.__dict__.pop(key) 执行你想要的操作
12
13
14 f=Foo()
15 # f.x=1
16 # print(f.x)
17 # print(f.__dict__)
18
19 f['x']=123123123123
20
21 # del f['x']
22
23 print(f['x'])
__str__:打印对象信息
在对象被打印的时候触发执行,只能返回字符串类型。
class People:
def __init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex def __str__(self): #在对象被打印时触发执行
return '<name:%s age:%s sex:%s>' %(self.name,self.age,self.sex) p1=People('egon',18,'male')
p2=People('alex',38,'male') print(p1)
print(p2)
__del__:在对象资源被释放的时候时触发。
eg:
class Foo:
def __init__(self,x):
self.x=x def __del__(self): #在对象资源被释放时触发
print('-----del------')
f=Foo(100000)
print('=======================>')
这种相当于在函数执行完了,
触发__del__这个方法
以后打印一个('-----del------')
如果在程序的执行过程中加入 del (删除某个值得操作)
也会触发程序的执行
class Foo:
def __init__(self,x):
self.x=x def __del__(self): #在对象资源被释放时触发
print('-----del------')
print(self) f=Foo(100000)
del f
print('=======================>')
程序异常的处理:
异常就是程序中运行是发生错误,错误的类型主要有这么几种:
1,语法错误(必须在程序运行之前解决)
2,逻辑错误
3,数据类型错误
4,索引错误
5,字典的key错误
如果错误发生的条件是不可预知的,则需要用到try....expect:在错误发生之后进行处理
基本语法为:
try:
被检测的代码块
expect 异常类型:
try中一旦检测到异常,就执行这个位置的逻辑
try:
aaaa
print('==-==>1')
# l=[]
# l[3]
# print('==-==>2')
# d={}
# d['x']
# print('==-==>3')
except NameError as e:
print(e)
except IndexError as e:
print(e)
except KeyError as e:
print(e)
except Exception as e:
print(e)
else:
print('在没有错误的时候执行')
finally:
print('无论有无错误,都会执行')
#raise ...... 在执行到某段的时候,自己抛出异常
#什么时候用try.....expect
是错误一定会发生,但是不确定在什么时候预知的条件时,用这个条件
Day8 面向对象反射 item方法 打印对象信息__str__ 构析方法__del__ 程序的异常处理的更多相关文章
- 跟着百度学PHP[4]OOP面对对象编程-6-构造方法(__construct)和构析方法(__destruct)
函数就是成员方法(方法有三:构造方法.成员方法.析构方法) 下面是两种方法. 构造方法和构析方法 00x1 构造方法 构造方法会在创建对象之后自动调用.其名称为__construct <?php ...
- python面向对象( item系列,__enter__ 和__exit__,__call__方法,元类)
python面向对象进阶(下) item系列 __slots__方法 __next__ 和 __iter__实现迭代器 析构函数 上下文管理协议 元类一.item系列 把对象操作属性模拟成字典的 ...
- Java反射获取类和对象信息全解析
反射可以解决在编译时无法预知对象和类是属于那个类的,要根据程序运行时的信息才能知道该对象和类的信息的问题. 在两个人协作开发时,你只要知道对方的类名就可以进行初步的开发了. 获取类对象 Class.f ...
- print(dir(...)) 打印对象或者类中的方法和函数
- php 抽象类、接口和构析方法
<?php /*class Ren { public static $color; static function Show() { Car::$name; self::$color; } } ...
- python全栈开发从入门到放弃之面向对象反射
1.classmethod.staticmethod方法 classmethod类方法默认参数cls,可以直接用类名调用,可以与类属性交互 #student文件内容 宝宝,男 博博,女 海娇,男 海燕 ...
- Java学习day9面向对象编程2-方法的可变个数的参数和方法的参数传递
一.方法的可变个数的参数. 问题:我们能够打印的信息都是来源于方法的参数,也就是形参的传递.那如何要给方法传递不同的参数? .1.采用数组形参来定义方法 public static void test ...
- java基础之对象当做参数传进方法的堆栈内存解析
值类型当做参数传进方法: 引用类型对象当做参数传进方法: String字符串当做参数传进方法:
- SpringBoot 使用 RestTemplate 调用exchange方法 显示错误信息
SpringBoot使用RestTempate SpringBoot使用RestTemplate摘要认证 SpringBoot使用RestTemplate基础认证 SpringBoot使用RestTe ...
随机推荐
- 【一天一道LeetCode】#235. Lowest Common Ancestor of a Binary Search Tree
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...
- UNIX网络编程——套接字选项(setsockopt)
setsockopt的一些用法: close socket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket: BOOL bReuseaddr=TRUE; setsockop ...
- JSP标签JSTL(4)--URL
<c:url>标签作用是将一个URL地址格式化为一个字符串,并且保存在一个变量当中.它具有URL自动重写功能.value指定的URL可以是当前工程的一个URL地址,也可以是其他web工程的 ...
- 新手推荐:Hadoop安装教程_单机/伪分布式配置_Hadoop-2.7.1/Ubuntu14.04
下述教程本人在最新版的-jre openjdk-7-jdk OpenJDK 默认的安装位置为: /usr/lib/jvm/java-7-openjdk-amd64 (32位系统则是 /usr/lib/ ...
- 【Linux 操作系统】 Secure CRT 终端配置 -- 配置语法高亮 光标 和 字体
. 1. Secure CRT 中没有想要的字体 Windows 8 下没有 Courier New 字体, 需要在系统的字体上进行配置, 进入 C:\Windows\Fonts 目录, 下面是目录的 ...
- Ubuntu安装JDK与环境变量配置
Ubuntu安装JDK与环境变量配置 一.getconf LONG_BIT 查看系统位数,并下载相应的jdk.我的系统是32位的,所以下载的jdk是:jdk-8u77-linux-i586.gz.并且 ...
- outlook邮箱邮件与企业邮箱同步(outlook本地文件夹邮件,web邮箱里没有)
用惯了outlook2010, 问题:今天将邮件放到自定义文件夹后,发现在web邮箱中看不到邮件了.不能同步到企业邮箱. 解决忙了一天,才知道是账户类型问题,pop3类型,只下载不上传.所以outlo ...
- JavaScript进阶(十)Array 数组详解
JS array 数组详解 数组的声明方法 arrayObj = new Array(); 的数组 ,并且第一位是5 数组的运算(传地址) var t2=new Array(); t2[0]=1; t ...
- Python学习笔记 - 字符串和编码
#!/usr/bin/env python3 # -*- coding: utf-8 -*- #第一行注释是为了告诉Linux/OS X系统, #这是一个Python可执行程序,Windows系统会忽 ...
- 《java入门第一季》正则表达式小案例
案例一:当你登陆某个论坛,向发帖子留下自己qq号的时候,可惜你的号码就是留不下,总是输入*,或者其它奇妙的字符串.其实原理就是用了正则表达式替换. /* * 替换功能 * String类的public ...