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

相关推荐
草履虫建模3 小时前
力扣算法 1768. 交替合并字符串
java·开发语言·算法·leetcode·职场和发展·idea·基础
华玥作者5 小时前
[特殊字符] VitePress 对接 Algolia AI 问答(DocSearch + AI Search)完整实战(下)
前端·人工智能·ai
naruto_lnq5 小时前
分布式系统安全通信
开发语言·c++·算法
Mr Xu_5 小时前
告别冗长 switch-case:Vue 项目中基于映射表的优雅路由数据匹配方案
前端·javascript·vue.js
前端摸鱼匠5 小时前
Vue 3 的toRefs保持响应性:讲解toRefs在解构响应式对象时的作用
前端·javascript·vue.js·前端框架·ecmascript
学嵌入式的小杨同学5 小时前
【Linux 封神之路】信号编程全解析:从信号基础到 MP3 播放器实战(含核心 API 与避坑指南)
java·linux·c语言·开发语言·vscode·vim·ux
lang201509286 小时前
JSR-340 :高性能Web开发新标准
java·前端·servlet
Re.不晚6 小时前
Java入门17——异常
java·开发语言
精彩极了吧6 小时前
C语言基本语法-自定义类型:结构体&联合体&枚举
c语言·开发语言·枚举·结构体·内存对齐·位段·联合
好家伙VCC6 小时前
### WebRTC技术:实时通信的革新与实现####webRTC(Web Real-TimeComm
java·前端·python·webrtc