python学习之类的反射(2018.6.18)

在学习网络编程的时候用到反射,然后发现自己反射这部分的应用不是很熟练,决定返回来重新整理一下

对于类的反射,主要有四个用法,下面都说一下

1.hasattr 判断对象或者类是否存在指定的属性,看代码以及结果

class people:
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def talk(self):
        print("%s is talking."%self.name)

p1 = people(‘alex‘,18)
print(hasattr(p1,‘name‘))
print(hasattr(p1,‘sex‘))

结果
True
False

hasattr判断完成后,会返回一个布尔值,有就返回True,无就返回False

2.getattr 获取到一个对象或者类的属性,加()就是执行,看代码

class people:
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def talk(self):
        print("%s is talking."%self.name)

p1 = people(‘alex‘,18)
print(getattr(p1,‘name‘))
print(getattr(p1,‘sex‘,‘man‘))
print(getattr(p1,‘sex‘))

结果
alex
man
  File "D:/PycharmProjects/s2018/day6/test.py", line 13, in <module>
    print(getattr(p1,‘sex‘))
AttributeError: ‘people‘ object has no attribute ‘sex‘

对于getattr,如果对象或者是类有输入的属性,则,返回正确属性。无则报错,如果我们指定默认值,则返回默认值,在看一下其他

class people:
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex

    def talk(self):
        print("%s is talking."%self.name)

p1 = people(‘alex‘,18,‘woman‘)

getattr(p1,‘talk‘)()#getattr获取到方法后加()就是执行
print(getattr(p1,‘sex‘,‘man‘))#类内如果对属性已经确认过,显示对象已经确认的值,而不显示默认值

结果
alex is talking.
woman

3.setattr 是修改已有的属性或者是新加一个属性,看代码

class people:
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex

    def talk(self):
        print("%s is talking."%self.name)

p1 = people(‘alex‘,18,‘woman‘)

print(‘修改前‘,p1.age)
setattr(p1,‘age‘,20)
print(‘修改后‘,p1.age)
setattr(p1,‘country‘,‘China‘)
print(p1.__dict__)

结果
修改前 18
修改后 20
{‘country‘: ‘China‘, ‘name‘: ‘alex‘, ‘sex‘: ‘woman‘, ‘age‘: 20}

4.delattr就是对现有的对象或者类的属性就行删除,这个比较简单,看代码

class people:
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex

    def talk(self):
        print("%s is talking."%self.name)

p1 = people(‘alex‘,18,‘woman‘)

print(‘修改前‘,p1.__dict__)
delattr(p1,‘name‘)
print(‘修改后‘,p1.__dict__)

结果
修改前 {‘age‘: 18, ‘name‘: ‘alex‘, ‘sex‘: ‘woman‘}
修改后 {‘age‘: 18, ‘sex‘: ‘woman‘}

5.学会基本的,还是需要一些应用才可以,写一个比较的应用,正好也是我在网络编程中需要的,看代码

class Servers:#定义一个服务器类
    def run(self):#定义方法run
        while True:
            cmds = input(">>>>:").strip().split()#将输入的命令行进行分解,分解成前面命令以及后面的文件名
            if hasattr(self,cmds[0]):#判断是否有命令!
                func = getattr(self,cmds[0])#如果命令存在则执行
                func(cmds)
            else:
                print(‘你的输入错误!‘)
                continue

    def get(self,cmds):#演示
        print(‘get.....‘,cmds[1])

    def put(self,cmds):#演示
        print(‘put.....‘,cmds[1])

obj = Servers()
obj.run()

结果
>>>>:get a.txt
get..... a.txt
>>>>:put a.txt
put..... a.txt
>>>>:gett a
你的输入错误!
>>>>:

以上就是类的反射的一些基本应用,任何知识都是基本简单,组合难,就看大家如何组合了,后面又想到其他想法,也会再去更新这个

2018.6.18

原文地址:https://www.cnblogs.com/gbq-dog/p/9196104.html

时间: 2024-07-30 04:53:40

python学习之类的反射(2018.6.18)的相关文章

python学习------------异常以及反射

学完这一节,python基础部分就要告一段落了,期待进入新一阶段的学习,也给自己说坚持就是胜利. 一.isinstance(obj,cls) 检查obj是否是cls的对象 1.首先从学过的变量开始 a = 12 b = "bb" print isinstance(a,int) #结果是True print isinstance(a,str) #结果是False print isinstance(b,str) #结果是True print isinstance(b,int) #结果是Fa

Python 学习之路 - 反射,hashlib

反射 1 import os 2 mo = "common" 3 # path = os.path.dirname(os.path.abspath(__file__)) 4 mod = __import__("other."+ mo,fromlist=True)#反射的方式导入一个模块,other.是模块的目录,mo是模块 5 6 7 # setattr() 在某个模块设置某个功能 8 # delattr() 在某个模块删除某个功能 9 10 def fun():

python学习笔记-Day08--(反射)

从一开始学习这一块感觉blog就比较难写,本来就不太会写博客的问题就更严重了. 想不出什么形象的比喻.所以要写blog的时候我的心情是这样的,但是我的心情应该调整成这样的. 还是用上课时举的例子来说明白. 首先说明一下,反射要用到内置函数, getattr(obj,name)hasattr(obj,name)delattr(obj,name)  #操作内存,不影响文件,很少使用setattr(obj,name)  #操作内存,不影响文件,很少使用 先看一下getattr()方法的说明 getat

Python学习心得(六) 反射机制、装饰器

1.反射机制 #/usr/bin/env python # -*- coding:utf-8 -*- ''' Python反射机制的核心本质:利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动 通俗讲就是通过用户传入url的不同,调用不同的模块函数,好多比较流行的web框架都是通过反射的机制,根据url的不同指向不同的模块 getattr(),hasattr(),setattr(),delattr()对模块的修改都在内存中进行,并不会影响文件中的真实内容

Python学习系列之反射

反射的定义 根据字符串的形式去某个对象中操作成员 根据字符串的形式去某个对象中寻找成员 根据字符串的形式去某个对象中设置成员 根据字符串的形式去某个对象中删除成员 根据字符串的形式去某个对象中判断成员是否存在 反射相关函数 getattr(object,name,[default]) 根据字符串的形式去某个对象中寻找成员 自定义一个模块(用来测试寻找这个模块里的某个成员) # 自定义模块的内容 [[email protected] ~]# cat commons.py #!/usr/bin/en

python学习笔记__反射

反射 # 通过字符串的形式对对象中的成员进行操作(获取/查找/添加/删除). 操作的内置函数: 1.获取   getattr(object, name) # 去对象object中获取name的内容 class Foo: def __init__(self, name, age): self.name = name self.age = age obj = Foo('Lemon147', 18) v = getattr(obj, 'name') print(v) >>> Lemon147

python学习第5??天—2018.6.04基本数据类型(dict)

一. 字典的简单介绍   字典(dict)是python中唯一的一个映射类型.他是以{ }括起来的键值对组成. 在dict中key是唯一的. 在保存的时候, 根据key来计 算出一个内存地址. 然后将key-value保存在这个地址中. 这种算法被称为hash算法, 所以, 切记, 在dict中存储的key-value中的 key'必须是可hash的, 如果你搞不懂什么是可哈希, 暂时可以这样记, 可以改变的都是不可哈希的, 那么可哈希就意味着不可变. 这个是为了能准确的计算内存地址而规定的.

python学习之反射

python学习反射 实例1 脚本内容如下: #coding: utf8 class myClass(object): def fax(self): print 'faxing....' def copy(self): print 'copying...' def printing(): print 'printing....' m = myClass() if hasattr(m,'fax'):          #判断myClass类中是否有fax方法 func = getattr(m,'f

Python学习之路—2018/6/14

Python学习之路-2018/6/14 1.浏览器与服务器 浏览器向服务器发送请求的过程为请求过程,服务器向浏览器响应的过程为响应过程. 2.简单的web应用程序 import socket sock = socket.socket() sock.bind(("100.113.14.43", 8080)) sock.listen(5) with open("index.html", "r") as f: # 先将样式写入html文件中,然后再读