gpt4 book ai didi

用于包装外部库的 Python 属性工厂或描述符类

转载 作者:太空狗 更新时间:2023-10-30 00:54:37 25 4
gpt4 key购买 nike

我正在为通过 Pythonnet 访问的 C# API 编写 Python 包装器类。因为我想用我自己的方法扩展 API,所以我决定使用概述的组合方法包装它 here :

C# API 大量使用我想在 Python 代码中模仿的属性。以下最小示例显示了我当前对具有两个属性宽度和高度的 C# Surface 类示例的方法:

class MySurface:
def __init__(api_surface):
self.api_surface = api_surface

@property
def width(self):
return self.api_surface.width

@width.setter
def width(self, value):
self.api_surface.width = value

@property
def height(self):
return self.api_surface.height

@height.setter
def height(self, value):
self.api_surface.height = value

我总共要处理大约 50 个属性。对于几组属性,我想添加自己的错误检查、类型转换等。我正在寻找的是一种定义属性的 Pythonic 方式,例如通过工厂或使用描述符。感谢您的帮助!

编辑:我希望能够在 python shell 中使用制表符补全,即 surface。 {hit tab} 应该建议 surface.width 和 surface.height。这似乎无法通过 Greg 概述的 getattr 方法实现。

最佳答案

我能够使用以下属性工厂解决问题:

def surface_property(api_property_name, docstring=None):
def getter(self):
return self.api_surface.__getattribute__(api_property_name)

def setter(self, value):
self.api_surface.__setattr__(api_property_name, value)

return property(getter, setter, doc=docstring)

使用这个函数,类定义简化为:

class MySurface:
def __init__(api_surface):
self.api_surface = api_surface

width = surface_property('Width','Get and set the width.')
height = surface_property('height', 'Get and set the height.')

关于用于包装外部库的 Python 属性工厂或描述符类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36580931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com