在Swift
中,您可以定义@dynamicMemberLookup
(参见文档)以直接访问嵌套在另一种类型中的属性。有没有Python
等价物?
我想要实现的示例Python
假设我有一个有成员的班级,例如:
c = OuterClass()
c.inner_class = ClassWithManyMembers()
c.inner_class.member1 = "1"
c.inner_class.member2 = "2"
c.inner_class.member3 = "3"
我希望能够获取/设置这些成员,而不必inner_class
每次都输入:
print(c.member1) # prints "1"
c.member1 = 3
print(c.member1) # prints "3"
Swift
(来源)中的示例:
按成员名称动态查找成员
@dynamicMemberLookup
struct DynamicStruct {
let dictionary = ["someDynamicMember": 325,
"someOtherMember": 787]
subscript(dynamicMember member: String) -> Int {
return dictionary[member] ?? 1054
}
}
let s = DynamicStruct()
// Use dynamic member lookup.
let dynamic = s.someDynamicMember
print(dynamic)
// Prints "325"
按关键路径动态查找成员
struct Point { var x, y: Int }
@dynamicMemberLookup
struct PassthroughWrapper<Value> {
var value: Value
subscript<T>(dynamicMember member: KeyPath<Value, T>) -> T {
get { return value[keyPath: member] }
}
}
let point = Point(x: 381, y: 431)
let wrapper = PassthroughWrapper(value: point)
print(wrapper.x)
我唯一的想法是Python
将monkey-patch
所有嵌套属性直接传递给外部类。