演示 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: Optional[str] = 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}")

相关推荐
恋猫de小郭19 小时前
移动端开发稳了?AI 目前还无法取代客户端开发,小红书的论文告诉你数据
前端·flutter·ai编程
文心快码BaiduComate19 小时前
百度云与光本位签署战略合作:用AI Agent 重构芯片研发流程
前端·人工智能·架构
闲云一鹤20 小时前
nginx 快速入门教程 - 写给前端的你
前端·nginx·前端工程化
QCY20 小时前
「完全理解」1 分钟实现自己的 Coding Agent
前端·agent·claude
曲幽21 小时前
FastAPI压力测试实战:Locust模拟真实用户并发及优化建议
python·fastapi·web·locust·asyncio·test·uvicorn·workers
一拳不是超人21 小时前
Electron主窗口弹框被WebContentView遮挡?独立WebContentView弹框方案详解!
前端·javascript·electron
anyup21 小时前
🔥2026最推荐的跨平台方案:H5/小程序/App/鸿蒙,一套代码搞定
前端·uni-app·harmonyos
雮尘21 小时前
如何在非 Claude IDE (TARE、 Cursor、Antigravity 等)下使用 Agent Skills
前端·agent·ai编程
icebreaker1 天前
Weapp-vite:原生模式之外,多一种 Vue SFC 选择
前端·vue.js·微信小程序
icebreaker1 天前
重走 Vue 长征路 Weapp-vite:编译链路与 Wevu 运行时原理拆解
前端·vue.js·微信小程序