1
ljbha007 2013-05-21 19:46:05 +08:00 1
如果socket的类型本来就是MySocket 那么不需要转换
如果socket的类型不是MySocket 那么无法转换(其他语言也不可以) |
2
tcsky OP @ljbha007 感觉是把socket对象内存里的值送一份给MySocket,MySocket额外添加一些属性值,部分语言里是可以实现的~ python里不知道,python里有没有对象复制之类的方法?
|
3
swulling 2013-05-21 20:00:47 +08:00
抽象一下lz的问题。
A是父类,B是A的子类,包含A的全部属性。 现有有个父类A的实例化对象a,问如何建立B的实例化对象b,使b有a的全部属性 |
4
swulling 2013-05-21 20:06:25 +08:00
一个方法是
b.__dict__ = a.__dict__ 如果想复制,加copy |
5
keakon 2013-05-21 20:15:29 +08:00
如果你知道 socket 内部的实现,直接对 self 进行 init,再对增加的属性赋值即可。
如果不清楚的话,用组合代替继承吧。 |
6
ipconfiger 2013-05-21 20:27:05 +08:00
用继承就是大坑,直接
def wrap(socket): setattr(socket,'flag',0) #init 里要做的事情 sock = wrap(socket) 这样就ok了嘛 |
7
tcsky OP @ipconfiger setattr只能设置类公共属性, 直接socket.socket.flag = 0 就能设置,对具体的实例对象无效~
|
8
tcsky OP @swulling __dict__ 我试了下,怎么具体实例对象没有__dict__,而且__dict__维护的属性好像是类公共的部分,然后乱七八糟的看不懂了~
|
9
binux 2013-05-21 21:11:22 +08:00 1
包装而不是继承
class MySocket(object): def __init__(self, p): self.p = p 调用socket的方法的时候self.p.foo 然后在MySocket上拓展你的方法 |
10
ipconfiger 2013-05-21 21:12:05 +08:00
@tcsky 实例对象是可以用setattr设置的,其实动态类型根本不需要继承这么死板的方式,而且你这里的需求和继承是正好相反的。
|
13
tcsky OP @binux 额 悲剧的,好像还有些问题,我现在需要的实现是select维护多个socket连接,通过为每个socket连接添加额外的属性标志,使得每一次select里能依据socket属性 读取不同位数和不同的数据解包方式。
select 返回的都是socket对象。 实际现在在实现的就是一个异步非阻塞 的自定义协议的socket tcp服务器, |
14
tcsky OP 擦~ 标题没法修改了,还以为能修改说~
暂时没找到方法,晚上试下其他途径实现目标。 python中 class 类型转换相关的,暂时只找到这个 class A(object): pass class B(A): def __add__(self, other): return self.value + other a = A() a.value = 5 a.__class__ = B print a + 10 直接修改__class__属性 适用于两个类都是自定义的,估计还要简单点的,最后不一定成功的~ 详细的 http://stackoverflow.com/questions/8062161/can-i-dynamically-convert-an-instance-of-one-class-to-another |
15
tcsky OP @ipconfiger 谢谢帮忙,我刚刚查了下 ,需要用setattr 需要有__dict__ 属性
You can add attributes to any object that has a __dict__. x = object() doesnt't have it for example. Strings and other simple objects also don't have it Classes using __slots__ also do not have it. Classes defined with class have it unless the latter applies socket 有的是 __slots__ 正在继续看~ |
16
tcsky OP ~~~~~~~~~~~~帖子过期~~~~~~~~~~~~
——————————————————- 方法考虑有误~ , 即使成功,后期会出现一堆不匹配,根本没法做到正确对应 |
17
tcsky OP 尝试 设一个列表,与socket的列表相对应,用同意ID 关联两组数据~~
|
18
myspring 2013-05-22 11:06:48 +08:00
成都高薪求python开发工程师,有意向者请留言,或发简历到monica.hu@mokitech.com,或加qq:2680622700详聊,请注明
|