演示 hasattr 和 ** 解包操作符

"""

演示 hasattr 和 ** 解包操作符

"""

============================================================================

1. 演示 ** 解包操作符

============================================================================

print("=" * 60)

print("1. 演示 ** 解包操作符")

print("=" * 60)

定义一个函数

def create_person(name, age, city="Unknown"):

return f"{name}, {age} years old, from {city}"

方式1:直接传参数

result1 = create_person("Alice", 25, "Beijing")

print(f"方式1(直接传参): {result1}")

方式2:使用字典和 ** 解包

person_data = {

"name": "Bob",

"age": 30,

"city": "Shanghai"

}

result2 = create_person(person_data)
print(f"方式2(
解包): {result2}")

方式3:部分参数

person_data2 = {

"name": "Charlie",

"age": 28

city 使用默认值

}

result3 = create_person(**person_data2)

print(f"方式3(部分参数): {result3}")

print()

============================================================================

2. 演示 hasattr

============================================================================

print("=" * 60)

print("2. 演示 hasattr")

print("=" * 60)

class Person:

def init (self, name, age):

self.name = name

self.age = age

复制代码
def greet(self):
    return f"Hello, I'm {self.name}"

创建一个对象

person = Person("David", 35)

检查属性

print(f"hasattr(person, 'name'): {hasattr(person, 'name')}")

print(f"hasattr(person, 'age'): {hasattr(person, 'age')}")

print(f"hasattr(person, 'email'): {hasattr(person, 'email')}")

检查方法

print(f"hasattr(person, 'greet'): {hasattr(person, 'greet')}")

print(f"hasattr(person, 'say_goodbye'): {hasattr(person, 'say_goodbye')}")

检查 dict 属性

print(f"hasattr(person, 'dict '): {hasattr(person, 'dict ')}")

if hasattr(person, 'dict '):

print(f"person.dict : {person.dict}")

print()

============================================================================

3. 演示 hasattr 在代码中的应用

============================================================================

print("=" * 60)

print("3. 演示 hasattr 在代码中的应用")

print("=" * 60)

def convert_to_dict(data):

"""将数据转换为字典"""

if isinstance(data, dict):

return data

elif hasattr(data, 'dict '):

如果对象有 dict 属性,转换为字典

return dict(data.dict )

else:

return {}

测试不同类型的输入

test_dict = {"key": "value"}

test_object = Person("Eve", 40)

test_string = "hello"

print(f"字典转换: {convert_to_dict(test_dict)}")

print(f"对象转换: {convert_to_dict(test_object)}")

print(f"字符串转换: {convert_to_dict(test_string)}")

print()

============================================================================

4. 完整示例:模拟 DescribeWorkflowRequest

============================================================================

print("=" * 60)

print("4. 完整示例:模拟 DescribeWorkflowRequest")

print("=" * 60)

import json

from typing import Optional

class SimpleRequest:

def init (self, session_id: str, dsl_data: Optionalstr = None):

self.session_id = session_id

self.dsl_data = dsl_data

从 JSON 字符串创建

json_string = '{"session_id": "abc123", "dsl_data": "some data"}'

json_data = json.loads(json_string)

print(f"JSON 数据: {json_data}")

print(f"JSON 数据类型: {type(json_data)}")

使用 ** 解包创建对象

request = SimpleRequest(**json_data)

print(f"创建的对象: session_id={request.session_id}, dsl_data={request.dsl_data}")

检查对象属性

print(f"对象有 dict : {hasattr(request, 'dict ')}")

if hasattr(request, 'dict '):

print(f"对象的 dict : {request.dict}")

相关推荐
我找到地球的支点啦17 分钟前
Matlab系列(009) 一CRC循环冗余校验详解
开发语言·数据结构·算法·matlab·信息与通信
维基框架19 分钟前
WIKI 知识库 v1.1.1 正式发布
人工智能·python
予昊20 分钟前
从零实现“在线五子棋对战“:WebSocket 实时通信 + 段位匹配
java·开发语言·网络·websocket
前端snow22 分钟前
ai agent --- 实现 openclaw 定时间效果
前端
码云之上43 分钟前
换模型之后,Chatbot 为什么要自己做 compact?
前端·agent·前端工程化
weixin_461408581 小时前
Mybatis-flex小记
java·开发语言·mybatis
星栈1 小时前
自定义 UI-UX-Pro-Max 的 CSV 知识库,把 AI 生成的后台拉回行业该有的样子
前端·agent·weui
研☆香1 小时前
简单的图片上传 删除 预览
前端
ITresearchGuest1 小时前
我用 AI 一小时写了一个世界杯数据可视化平台|前端 VibeCoding 初体验
前端·人工智能·信息可视化
青梅味猪大肠2 小时前
【深入浅出C++】为什么虚表指针可以解决菱形继承
开发语言·c++