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

相关推荐
Alair‎6 分钟前
前端开发之环境配置
前端·react.js
历程里程碑8 分钟前
Linux 2 指令(2)进阶:内置与外置命令解析
linux·运维·服务器·c语言·开发语言·数据结构·ubuntu
Deca~11 分钟前
VueVirtualLazyTree-支持懒加载的虚拟树
前端·javascript·vue.js
王燕龙(大卫)12 分钟前
rust入门
开发语言·rust
无心水13 分钟前
2、Go语言源码文件组织与命令源码文件实战指南
开发语言·人工智能·后端·机器学习·golang·go·gopath
2501_9445264214 分钟前
Flutter for OpenHarmony 万能游戏库App实战 - 主题切换实现
android·开发语言·javascript·python·flutter·游戏·django
张张努力变强15 分钟前
C++ 类和对象(三):拷贝构造函数与赋值运算符重载之核心实现
开发语言·c++
深蓝电商API15 分钟前
Selenium处理iframe嵌套页面实战
爬虫·python·selenium
福楠16 分钟前
C++ STL | set、multiset
c语言·开发语言·数据结构·c++·算法
一晌小贪欢17 分钟前
Python 健壮性进阶:精通 TCP/IP 网络编程与 requirements.txt 的最佳实践
开发语言·网络·python·网络协议·tcp/ip·python基础·python小白