python-魔法属性和反射
python魔法属性和反射
#!/usr/bin/python3
# coding:utf-8
# Auther:AlphaPanda
# Description:与类相关的魔法属性
# Version:1
# Date:Wed Dec 4 02:22:28 EST 2019 class Man():
pass class Woman():
pass class Children(Man,Woman):
"""
成员属性:
skin,hair
成员方法:
eat,drink,__sleep
"""
skin = "黑皮肤"
hair = "黄头发" # 普通无参方法
def eat():
print("小孩会吃糖果")
# 绑定方法:
def drink(self):
print("小孩会吃奶奶")
# 大笑
def laugh(self,func):
print(func)
# 获取函数的名字
print(func.__name__)
print("小孩会大笑")
# 私有方法
def __sleep(self):
print("小孩喜欢睡觉")
# __dict__ 获取对象或类的内部成员结构
obj = Children()
print(obj.__dict__)
print(Children.__dict__) # __doc__ 获取对象或者类的内部文档
print(obj.__doc__)
print(Children.__doc__) # __name__ 获取类名函数名
def ceshi():
print("我是测试函数")
obj.laugh(ceshi) # __class__ 获取当前对象所属的类
cls = obj.__class__
print(cls.hair) # __bases__ 获取一个类直接继承的所有父类,返回元组
tup = Children.__bases__
print(tup) ### 反射 :通过字符串去操作类对象,或者模块中的属性方法
# 类的反射
# 1 hasattr() 检测对象/类中是否有指定成员
# 对象
res = hasattr(obj,"skin") # 属性
print(res)
res = hasattr(obj,"drink") # 方法
print(res) # 类
res = hasattr(Children,"eat")
print(res) # 2 getaddr() 获取对象/类成员的值 # 对象
res = getattr(obj,"hair") # 属性
print(res) res = getattr(obj,"hair123","第三个参数是默认值,如果该成员不存在,默认返回该值")
print(res) # 类:
res = getattr(Children,"drink")
print(res) # 反射对象当中的方法
func1 = getattr(obj,"drink")
print(func1) # 反射的是绑定到对象的方法,对象系统会自动传递
func1() # 反射类当中的方法
func2 = getattr(Children,"drink")
print(func2)
func2(2) """
func = input("请输入您要反射的行数:")
if hasattr(Children,func):
func_new = getattr(Children,func)
func_new()
else:
print("不存在该方法")
"""
# 3 setattr()设置对象/类成员的值
# 对象
setattr(obj,"name","wangwen")
print(obj.name) # 类:
setattr(Children,"wc",lambda : print("小孩会尿尿"))
print(Children.__dict__)
Children.wc() # 4 delattr() 删除对象/类成员的值
# 对象
print(obj.__dict__)
delattr(obj,"name")
print(obj.__dict__) # (2) 模块的反射
"""
包:文件夹
模块:文件
"""
def func1():
print("我是func1方法")
def func2():
print("我是func2方法")
def func3():
print("我是func3方法")
def func4():
print("我是func4方法") # sys.modules 返回一个字典,字典的键是加载的所有模块
import sys
print(sys.modules)
# 获取当前模块得对象,通过这个对象可以进行反射 __main__这个键对应的是本模块对象
mymodule = sys.modules["__main__"]
print(mymodule) # 小案例:通过字符串操作了该模块中相应的方法
while True:
strvar = input("请输入你要反射的方法:")
if hasattr(mymodule,strvar):
func = getattr(mymodule,strvar)
func()
else:
print("没有改函数")
python-魔法属性和反射的更多相关文章
- python魔法属性
1.__doc__:表示类的描述信息 class Person(object): '''定义人的类''' def func(self): pass print(Person.__doc__) 结果为: ...
- python进阶之类常用魔法方法和魔法属性
前言 前面我们总结过了python的关键字.运算符.内置函数.语法糖等与python魔法方法之间的关系,现在我们更细一点,看看python的面向对象编程有哪些常用的魔法属性和魔法方法. 魔法属性 对于 ...
- python进阶之函数和类内建魔法属性
前言 关于对象的魔法方法我们已经讲得太多,但是对于类或函数内建的魔法属性和功能我们涉及较少,下面系统了解一下类和函数的内建属性. 查看内建属性 class Person(object): pass d ...
- Python类属性访问的魔法方法
Python类属性访问的魔法方法: 1. __getattr__(self, name)- 定义当用户试图获取一个不存在的属性时的行为 2. __getattribute__(self, name)- ...
- Python高级笔记(七)魔法属性
1. 私有属性 名字重整 print(Test.__dict__) {'__weakref__': <attribute '__weakref__' of 'Test' objects>, ...
- 『无为则无心』Python面向对象 — 60、魔法属性
目录 1.魔法属性__name__ 2.魔法属性__bases__ 3.魔法属性__mro__ 4.魔法属性__doc__ 5.魔法属性__module__ 和__class__ 6.魔法属性__di ...
- Python魔法 - MetaClass
Python魔法 - MetaClass metaclass The class of a class. Class definitions create a class name, a class ...
- Python魔法方法总结及注意事项
1.何为魔法方法: Python中,一定要区分开函数和方法的含义: 1.函数:类外部定义的,跟类没有直接关系的:形式: def func(*argv): 2.方法:class内部定义的函数(对象的方法 ...
- python魔法方法:__getattr__,__setattr__,__getattribute__
python魔法方法:__getattr__,__setattr__,__getattribute__ 难得有时间看看书....静下心来好好的看了看Python..其实他真的没有自己最开始想的那么简单 ...
随机推荐
- Egret入门学习日记 --- 第二篇 (书籍的选择 && 书籍目录 && 书中 3.3 节 内容)
第二篇 (书籍的选择 && 书籍目录 && 书中 3.3 节 内容) 既然选好了Egret,那我就要想想怎么学了. 开始第一步,先加个Q群先,这不,拿到了一本<E ...
- 1.LTE系统概述
信息源:中国大学MOOC 中搜索 移动通信网络与优化 兰州交通大学 3GPP协议:https://www.3gpp.org/DynaReport/36-series.htm 可以在中国大学MOOC中搜 ...
- [Vuejs] Vue解决代理设置导致浏览器Session丢失的问题
以下是会造成Session丢失的代理: proxyTable: { '/proxyApi': { target: 'http://111.18.149.215:8080/WRSOCXSystem/ht ...
- SQL修改数据表字段长度
alter table m_Assysn_t nocheck CONSTRAINT allAlter Table m_Assysn_t ALTER column ppid VARCHAR(150)al ...
- 第八周课程总结-实验报告六(Java异常)
理解异常的基本概念: 掌握异常处理方法及熟悉常见异常的捕获方法 实验要求 练习捕获异常.声明异常.抛出异常的方法.熟悉try和catch子句的使用. 掌握自定义异常类的方法 实验内容 编写一个类,在其 ...
- yarn以及mapreduce部署
修改hadoop的配置文件yarn-site.xml: 复制该配置文件到其他服务器 scp yarn-site.xml ubuntu-01:$PWD yarn启动命令: start-yarn.sh M ...
- mysql substr方法
mysql中的substr()函数 mysql中的substr()函数和hibernate的substr()参数都一样,就是含义有所不同. 用法: substr(string string,num s ...
- 从头到尾说一次 Java 垃圾回收,写得非常好! (转)
之前上学的时候有这个一个梗,说在食堂里吃饭,吃完把餐盘端走清理的,是 C++ 程序员,吃完直接就走的,是 Java 程序员.
- Exchange 2010的部署
实验拓扑: 实验准备条件:计算机基本配置的准备:DC (vbers):配置IP地址.子网掩码.网关EX (vbers2):配置IP地址.子网掩码.网关.指定DNS 域环境搭建的准备1.在计算机名为vb ...
- Codeforce1196_D_F
D RGB Substring 题意 给定一个只含RGB三种字符的字符串,问最少修改多少个字符,能使得修改后的字符串存在一个长度为\(k\)的子串是...RGBRGB...这个循环字符串的子串. 分析 ...