day7_python之面向对象高级-反射
反射:通过字符串去找到真实的属性,然后去进行操作
python面向对象中的反射:通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射)
1、两种方法访问对象的属性
class Foo:
x=1
def __init__(self,name):
self.name=name def f1(self):
print('from f1') f=Foo('egon')
print(f.__dict__)
方式一:访问那么对应的值
print(f.name)
方式二:
print(f.__dict__['name'])
2、反射
2.1、hasattr判断属性
class Foo:
x = 1 def __init__(self, name):
self.name = name def f1(self):
print('from f1') f = Foo('egon')
print(hasattr(f, 'name')) # f.name 判断f对象里有没有name这个属性,一定得是字符串形式的name
print(hasattr(f, 'f1')) # f.f1
print(hasattr(f, 'x')) # f.x
2.2、setattr 设置属性
class Foo:
x = 1
def __init__(self, name):
self.name = name def f1(self):
print('from f1')
f = Foo('egon') setattr(f,'age',18)#f.age=18 给f设置一个age属性
print(f.age)
2.3、getattr 获取属性
class Foo:
x = 1
def __init__(self, name):
self.name = name def f1(self):
print('from f1')
f = Foo('egon') 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()
2.4、delattr 删除属性
class Foo:
x = 1
def __init__(self, name):
self.name = name def f1(self):
print('from f1')
f = Foo('egon')
delattr(f,'name')# del f.name
print(f.__dict__)
3、反射的用法
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): # 首先判断self(对象)里有没有用户输入的功能
func = getattr(self, cmd) # 用户输入的命令是个字符串,应该把字符串反射到正真的属性上
func() def get(self):
print('get func') def put(self):
print('put func') f = Ftpserver('192.168.1.2', 21)
f.run()
day7_python之面向对象高级-反射的更多相关文章
- CSIC_716_20191129【面向对象高级----反射、类的内置方法(魔法方法)、单例模式】
反射 反射是通过'字符串'对 对象的属性进行操作,反射有四个内置的方法. hasattr 通过字符串 判断对象的属性或者方法是否存在 getattr 通过字符串 获取对象的属性或者方法 ...
- Day08:继承与派生,多态,封装,绑定与非绑定方法,面向对象高级(反射,__str__,__del__)
上节课复习:1.编程思想 面向过程 核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么后干什么 基于该思想编写程序就好比在设计一条流水线,是一种机械式的思维 ...
- 简学Python第七章__class面向对象高级用法与反射
Python第七章__class面向对象高级用法与反射 欢迎加入Linux_Python学习群 群号:478616847 目录: Python中关于oop的常用术语 类的特殊方法 元类 反射 一.P ...
- python高级之面向对象高级
python高级之面向对象高级 本节内容 成员修饰符 特殊成员 类与对象 异常处理 反射/自省 单例模式 1.成员修饰符 python的类中只有私有成员和公有成员两种,不像c++中的类有公有成员(pu ...
- Python自动化 【第七篇】:Python基础-面向对象高级语法、异常处理、Scoket开发基础
本节内容: 1. 面向对象高级语法部分 1.1 静态方法.类方法.属性方法 1.2 类的特殊方法 1.3 反射 2. 异常处理 3. Socket开发基础 1. ...
- 第五篇:python高级之面向对象高级
python高级之面向对象高级 python高级之面向对象高级 本节内容 成员修饰符 特殊成员 类与对象 异常处理 反射/自省 单例模式 1.成员修饰符 python的类中只有私有成员和公有成员两 ...
- Python 面向对象之反射
Python 面向对象之反射 TOC 什么是反射? hasattr getattr setattr delattr 哪些对象可以使用反射 反射的好处 例子一 例子二 什么是反射? 程序可以访问.检查和 ...
- C++面向对象高级编程(九)Reference与重载operator new和operator delete
摘要: 技术在于交流.沟通,转载请注明出处并保持作品的完整性. 一 Reference 引用:之前提及过,他的主要作用就是取别名,与指针很相似,实现也是基于指针. 1.引用必须有初值,且不能引用nul ...
- C++面向对象高级编程(八)模板
技术在于交流.沟通,转载请注明出处并保持作品的完整性. 这节课主要讲模板的使用,之前我们谈到过函数模板与类模板 (C++面向对象高级编程(四)基础篇)这里不再说明 1.成员模板 成员模板:参数为tem ...
随机推荐
- opencv java swing 图片灰度化 二值化
工程下载地址 https://download.csdn.net/download/qq_16596909/11503860 基于maven 首先引入opencv <!-- https://mv ...
- Robbin负载均衡
Robbin是在Spring Cloud中的一个组件,是由Netfix发布的负载均衡器,有助于控制HTTP和TCP客户端的行为.它给我们提供了默认的轮询.随机等负载均衡算法.同时也可以由我们定义自己的 ...
- db link的查看创建与删除 1
1.查看dblink select owner,object_name from dba_objects where object_type='DATABASE LINK'; 或者 select * ...
- 2019-8-31-Developing-Universal-Windows-Apps-开发UWA应用-问答
title author date CreateTime categories Developing Universal Windows Apps 开发UWA应用 问答 lindexi 2019-08 ...
- Codeforces 375A
这是一道数学题,真是很考验数学思维,之前也遇到过相似的问题,但是依然是想不到点子上,就这提而言,最重要的就是 能否发现由 1, 6, 8,9这四个数字组成的排列对7取模是可以得到0, 1, 2, 3, ...
- MVVMDemo
QueryCommand.cs using System;using System.Collections.Generic;using System.Linq;using System.Text;us ...
- iOS开发——你真的会用SDWebImage?
http://www.cocoachina.com/ios/20160503/16064.html 本文授权转载,作者:hosea_zhou(简书) SDWebImage作为目前最受欢迎的图片下载第三 ...
- Leetcode917.Reverse Only Letters仅仅反转字母
给定一个字符串 S,返回 "反转后的" 字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转. 示例 1: 输入:"ab-cd" 输出:" ...
- linux C 编译时手动链接遇到的问题(未解决)
写多线程的时候,编译的时候遇到了问题,开始的时候是这样的: 编译器不认识pthread_create和pthread_join这两个函数. 搜了一下原因是没有链接相应的库,下面是我看到一个博友写的: ...
- Spring_通过Bean的Factory配置Bean
package com.tanlei.bean.FactoryBean; import org.springframework.beans.factory.FactoryBean; public cl ...