cme*_*ren 3 python methods class
我正在使用matplotlib 工具包 ( ) 中模块中的Basemap对象。在的文件(即模块)中,定义了一种在地图上绘制纬度的方法。我的目标是复制该方法以创建一个名为 的新方法,进行一些调整以绘制磁纬度而不是地理纬度。basemapmpl_toolkits.basemap.Basemapbasemap__init__.pympl_toolkits.basemap.__init__drawparallelsdrawmlat
理想情况下,我希望 newdrawmlat等同于原始文件drawparallel(我可以使用 using 调用的 Basemap 实例的绑定方法BasemapInstance.drawmlats()),并且我不想修改原始文件。我将如何做到这一点?
我已经尝试了“配方”的变体MyObj.method = MethodType(new_method, None, MyObj),但是没有在原始源文件中放置任何东西,新方法无法从 Basemap 模块(例如在其 中定义__init__.py)访问全局变量等。
如果我似乎误解了某些东西,我可能有 - 我或多或少是面向对象编程的新手。
Python 是高度可修改的。只需将您的函数添加到类中:
from mpl_toolkits.basemap import Basemap
def drawmlat(self, arg1, arg2, kw=something):
pass
Basemap.drawmlat = drawmlat
Run Code Online (Sandbox Code Playgroud)
现在这个Basemap类有一个drawmlat方法;在实例上调用它self并将绑定到实例对象。在实例上查找方法时,该函数将自动绑定为您的方法。
Basemap.__init__您需要关心的方法中定义的任何内容都是 上的属性self。
查看mpl_toolkits.basemap.__init__模块后,我确实看到该drawparallel方法依赖于一些全局变量;您可以将模块中的那些导入到您自己的命名空间中:
from mpl_toolkits.basemap import Basemap, _cylproj, _pseudocyl
Run Code Online (Sandbox Code Playgroud)
这与您所做的其他导入没有什么不同;原始drawparallel方法也依赖于import numpy as npand from matplotlib.lines import Line2D,这使得原始模块中的np和Line2D全局变量。