您的位置:首页 > 编程语言 > Python开发

Learning python 系列3

2008-05-20 10:23 309 查看
前两天分析了hardware目录和statem的目录,虽然对整个结构还缺乏系统性认识,对python的特性也还在逐步的熟悉中,今明几天准备分析一下plugin.py 和plugin的目录下的文件。在此之前,还是画画昨天分析的关系图。完成了昨天的关系图,现在可以开始了.
plugin.py
主要由三个基类和一个管理类。DevicePlugin,OSPlugin,NotificationPlugin和PluginManager。
DevicePlugin:
这个类有点复杂,首先它是实现interface.IDevicePlugin,而IDevicePlugin有是IVMCPlugin的子类,而IVMCPlugin是继承与Interface.
当然,对于Class IVMCPlugin有member:name,version,和author,并且有抽象方法:initialize() 和 shutdown().而对于IDevicePlugin呢,他除了有超类的成员外,还有:baudrate,custom,sim和sconn.
现在在开始DevicePlugin这个类吧。首先它有成员:
baudrate:来自于IDevicePlugin
cport:
dport:
custom:来自于IDevicePlugin
sconn:来自于IDevicePlugin
sport:
simklass:
__remote_name__:
当然还有一些并没有完全列出来。
有方法:
preinit(self):用self.simklass来构造sim,调用sim.preinit()
postinit(self):调用sim.postinit()
has_two_ports(self):判断是否有两个ports.

而DBusDevicePlugin类是继承与DevicePlugin类的,这样他就有基类的所有的属性。
而他实现的接口是interface.IDBusDevicePlugin。而IDBusDevicePlugin是从IDevicePlugin继承而来。
他有members:
udi:
parent_udi:
以及隐藏的属性:__properties__={}
方法:重载了方法 ==.也就是__eq__.
_get_my_children(self,device_props):如果device_props的成员满足某些条件就被认为是,添加到children的list中。
extract_info(self,children):extract the cport和dport.
setup(self,device_props):调用_get_my_children(),然后调用self.extract_info()
这里似乎主要与device_props的参数很相关。

而至于其他几个子类:RemoteDevicePlugin()和UnknownDevicePlugin()只是说实现对应的interface。

OSPlugin和DevicePlugin有些类似,它也是要实现interface.IOSPlugin的接口,IOSPlugin同样是IVMCPlugin的子类,他有私有的成员:
distrib_id:
distrib_version:
abstraction:
customization:
还有方法:
is_valid(lsb_info)
get_connection_args(wvdial_conf_path)
get_disconnection_args()
check_dialer_assumptions()
当然他仅仅是接口类,没有做任何定义。
在回来看,OSPlugin,拥有成员
abstration:
customization:这两个来自IOSPlugin.
dialer:
os_name:
os_version:
manage_secrets:
pppd_is_suid:
在这里也定义了三个方法
check_if_pppd_is_suid:
is_valid:没有实现
initialize():首先调用check_if_pppd_is_suid(),如果定义了customiztion就用他update abstraction。

对于NotificationPlugin(),也是用来实现interface.INotificationPlugin.他有一个成员
klass和一个方法on_notification_received(wrapper,notification).
在这个类中没有实现他。
剩下的就是class PluginManager类。他所做的似乎都是类的方法
get_plugins(cls,interface=IPlugin,package=...):
这个市调用getPlugins(interface,package)这个到底返回什么,怎么返回,我还真的不知道。
regenerate_cache(cls):
这个实际上是用1的返回值组成list.
get_plugin_by_name(cls,name,interface=IPlugin)
通过name找到plugin.cls.get_plugins.所以这里的cls,应该是PlugManager,不是吗?
get_plugin_by_remote_name(cls,name,interface=IPlugin)
这个与上面相似,只是用__remote_name__,而不是name.

这个样,关于,plug.py就这么多。OSplugin主要和dialer可能相关,而DevicePlugin主要和sim
以及udi,parent_udi相关。也就是DBus.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: