在 Python 中，虽然没有 JavaScript 的可选链操作符 `?.`，但我们可以通过创建一个 `OptionalChaining` 类来模拟类似的行为，安全地处理 `None` 值。

### 使用示例

```
# 测试数据结构
person = {
    "name": "Alice",
    "address": {
        "city": "London"
    },
    "get_age": lambda: 30,
    "contacts": [
        {"type": "email", "value": "alice@example.com"}
    ]
}

# 使用包装器
safe_person = optional(person)

# 安全访问属性
print(safe_person.name.value)                        # 'Alice'
print(safe_person.address.city.value)                # 'London'
print(safe_person.nonexistent.property.value)        # None

# 安全方法调用
print(safe_person.get_age().value)                   # 30
print(safe_person.nonexistent_method().value)        # None

# 安全访问字典元素
print(safe_person["address"]["city"].value)          # 'London'
print(safe_person["nonexistent_key"]["value"].value) # None

# 安全访问列表
print(safe_person.contacts[0]["type"].value)         # 'email'
print(safe_person.contacts[100]["value"].value)      # None

# 带默认值获取
print(safe_person.nonexistent.get("Default"))        # 'Default'
```

### 主要特性

1. **安全属性访问**：自动处理 `None` 值

   ```
   value = optional(obj).a.b.c.value
   ```

2. **安全方法调用**：可调用对象的安全执行

   ```
   result = optional(obj).method().value
   ```

3. **安全索引访问**：支持字典和列表的安全索引

   ```
   item = optional(obj)["key"][0].value
   ```

4. **链式操作**：无限级的安全链式调用

   ```
   result = optional(obj).prop.method()[0].subprop.value
   ```

5. **默认值支持**：

   ```
   value = optional(obj).prop.get("Default")
   ```

### 技术要点

1. 使用 `__getattr__` 实现安全的属性访问
2. 使用 `__call__` 实现安全的方法调用
3. 使用 `__getitem__` 实现安全的索引访问
4. 每次操作返回新的 `OptionalChaining` 实例保持链式调用
5. 最终通过 `.value` 或 `.get()` 获取结果

这种方法可以有效避免 Python 中的 `AttributeError`、`TypeError` 等因访问 `None` 值而产生的异常，使代码更加简洁安全，特别是在处理复杂嵌套数据结构时。