Python_day26

property相关

# ### property 
"""
可以把方法变成属性 : 可以动态的控制属性的获取,设置,删除相关操作
@property  获取属性
@方法名.setter  设置属性
@方法名.deleter 删除属性
"""

# 方法一
"""是同一个方法名"""
class MyClass():
	
	def __init__(self,name):
		self.name = name
		
	@property
	def username(self):
		return self.name
		# pass
		
	@username.setter
	def username(self,val):
		# print(val)
		self.name = val
		pass
		
	@username.deleter
	def username(self):
		# print("222")
		del self.name
		pass

obj = MyClass("小红")
# 获取值的时候自动触发@property 装饰器下的方法
res = obj.username
print(res)

# 设置值的时候自动触发@username.setter 装饰器下的方法
obj.username = "小兰"
print(obj.username)

# 删除值的时候自动触发@username.deleter 装饰器下的方法
# del obj.username
# print(obj.username)


# 方法二
class MyClass():

	def __init__(self,name):
		self.name = name
		
	# 获取数据
	def get_username(self):
		return self.name
	
	# 设置数据
	def set_username(self,val):
		self.name = val
	
	# 删除数据
	def del_username(self):
		del self.name
		
	# 参数的顺序: 获取 , 设置  , 删除
	username = property(get_username , set_username  , del_username )
		


obj = MyClass("小芳")
# 获取值的时候,执行get_username下的相关操作
print(obj.username)

# 设置值的时候,执行 set_username 下的相关操作
obj.username = "11223344"
print(obj.username)

# 删除值的时候,执行 del_username 下的相关操作
del obj.username
print(obj.username)




# ### 反射
""" 通过字符串操作类对象 或者 模块中的相关成员的操作 """
"""
#hasattr() 检测对象/类是否有指定的成员
#getattr() 获取对象/类成员的值
#setattr() 设置对象/类成员的值
#delattr() 删除对象/类成员的值 
"""


# ### part1 通过字符串反射类对象中的成员
class Father():
	pass

class Mother():
	pass
	
class Children(Father,Mother):
	eye = "蓝色的"
	weight = "1"
	
	def eat(self):
		print("喝")
	
	def drink(self):
		print("喝")
		
	def __la(self):
		print("无法控制")
	
obj = Children()
	
# (1)hasattr() 检测对象/类是否有指定的成员
# 对象
res = hasattr(obj,"eye")
print(res)

# 类
res = hasattr(Children,"eat123")
print(res)


# (2)getattr() 获取对象/类成员的值
# 对象
res = getattr(obj,"weight")
print(res)
# 如果获取的值不存在,可以设置第三个参数,防止报错
res = getattr(obj,"weight123","抱歉这个值不存在")
print(res)

# 类
# 通过类进行反射 (反射出来的是普通方法)
func = getattr(Children,"drink")
print(func)
func(1)
# 通过对象进行反射 (反射出来的是绑定方法)
func = getattr(obj,"drink")
print(func)
func()

# 综合案例
strvar = "eat11"
if hasattr(obj,strvar):
	func = getattr(obj,strvar)
	func()
else:
	print("抱歉,该成员不存在")


# (3) setattr() 设置对象/类成员的值
# 对象
setattr(obj,"skin","黑人")
print(obj.skin)
# 类
setattr(Children,"skin","土耳其人")
print(Children.skin)
print(obj.skin)

# (4) delattr() 删除对象/类成员的值 
# 对象
# delattr(obj,"skin")
# print(obj.skin)

# 类
# delattr(Children,"skin")
# print(Children.skin)



# ### part2 通过字符串反射模块中的成员
"""
sys.modules 返回一个系统字典,字典的键是加载的所有模块
'__main__': <module '__main__' from '/mnt/hgfs/python32_gx/day25/2.py'>
字典中的__main__这个键对应的是该文件的模块对象;
"""

def func1():
	print("我是func1方法")
def func2():
	print("我是func2方法")
def func3():
	print("我是func3方法")

import sys
print(sys.modules) # 系统字典
module = sys.modules["__main__"]
print(module)
res = getattr(module,"func1")
print(res)

# 综合案例 : (通过字符串反射模块中的成员)
while True:
	strvar = input("请输入你想要使用的功能:")
	if hasattr(module,strvar):
		func = getattr(module,strvar)
		func()
	elif strvar.upper() == "Q":
		print("再见")
		break
	else:
		print("没有该成员~!")



### 装饰器(decorator)

'''
定义:装饰器用于拓展原来函数功能的一种语法,返回新函数替换旧函数
优点:在不更改原函数代码的前提下 给函数拓展新的功能


### 方法的分类


普通方法:  没有任何参数传递,只能类调用
绑定方法:  把默认传参的方法叫做绑定方法,绑定到对象(默认传对象),绑定到类(默认传类)
非绑定方法:静态方法 (无需传任何参数,对象和类都能调用)

### property

用property类装饰器,修饰的方法,变为描述符
效果:把类中方法变为属性使用,用来控制描述符的获取,设置,删除

### 与类相关的魔术属性

# __dict__ 获取对象或类的内部成员结构
# __doc__  获取对象或类的内部文档
# __name__ 获取类名函数名
# __class__ 获取当前对象所属的类
# __bases__ 获取一个类直接继承的所有父类,返回元组

### 反射

# 概念:通过字符串去操作类对象 或者 模块中的属性方法
# (1)类中的反射
#hasattr() 检测对象/类是否有指定的成员
#getattr() 获取对象/类成员的值
#setattr() 设置对象/类成员的值
#delattr() 删除对象/类成员的值 

# (2)模块的反射
sys.modules 返回一个系统字典,字典的键是加载的所有模块



'''



相关推荐

  1. ubuntu22 安装docker26

    2024-04-12 17:32:02       37 阅读
  2. 12.<span style='color:red;'>26</span>

    12.26

    2024-04-12 17:32:02      64 阅读
  3. LeetCode--26

    2024-04-12 17:32:02       53 阅读
  4. 4 -<span style='color:red;'>26</span>

    4 -26

    2024-04-12 17:32:02      29 阅读
  5. 面试经典150题(21-26)

    2024-04-12 17:32:02       64 阅读
  6. 周报 | 24.4.22-24.4.28文章汇总

    2024-04-12 17:32:02       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-12 17:32:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-12 17:32:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-12 17:32:02       82 阅读
  4. Python语言-面向对象

    2024-04-12 17:32:02       91 阅读

热门阅读

  1. Netty框架介绍并编写WebSocket服务端与客户端

    2024-04-12 17:32:02       33 阅读
  2. 计算机笔记(8)续20个

    2024-04-12 17:32:02       28 阅读
  3. pandas习题 029:用 Series 构造 DataFrame

    2024-04-12 17:32:02       39 阅读
  4. 单词分析---模拟,排序

    2024-04-12 17:32:02       35 阅读
  5. 使用Python实现决策树算法

    2024-04-12 17:32:02       30 阅读
  6. Swift中的布尔型

    2024-04-12 17:32:02       36 阅读