演示 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}")

相关推荐
测试员周周2 小时前
【Appium 系列】第16节-WebView-H5上下文切换 — 混合应用的自动化难点
运维·开发语言·人工智能·功能测试·appium·自动化·测试用例
测试19982 小时前
软件测试 - 单元测试总结
自动化测试·软件测试·python·测试工具·职场和发展·单元测试·测试用例
LaughingZhu4 小时前
Product Hunt 每日热榜 | 2026-05-21
前端·人工智能·经验分享·chatgpt·html
怕浪猫4 小时前
Electron 开发实战(一):从零入门核心基础与环境搭建
前端·electron·ai编程
曲幽5 小时前
我用了FastApiAdmin后,连夜把踩过的坑都整理出来了
redis·python·postgresql·vue3·fastapi·web·sqlalchemy·admin·fastapiadmin
杜子不疼.5 小时前
【C++ AI 大模型接入 SDK】 - DeepSeek 模型接入(上)
开发语言·c++·chatgpt
加号35 小时前
【C#】 串口通信技术深度解析及实现
开发语言·c#
小鹏linux5 小时前
Ubuntu 22.04 部署开源免费具有精美现代web页面的Casdoor账号管理系统
linux·前端·ubuntu·开源·堡垒机
sycmancia5 小时前
Qt——编辑交互功能的实现
开发语言·qt
石山代码6 小时前
C++ 内存分区 堆区
java·开发语言·c++