函数能不能“预知”的访问某个实例?
代码:
class A:
def __init__(self):
self.var1 = Str
self.var2 = []
self.var3 = {}
class B
def operate1:
return a.varX
def operate2
return a.varX
a = A()
B.operate1()
B.operate2()
将 A()实例化的变量名 a 是不固定的,可能是 b c d e 。
operate1 、 operate2...operateX 的操作里都包含有 class A 实例化之后才有的变量,如果不能提前知道变量名,这样的操作就无从谈起。有什么办法可以解决吗?试过将 class 嵌套,或者引入父子关系好像都没办法解决。
如果吧 operate1 2 3...写在 class A 之下的话,虽然可以解决问题,但因为某些原因,写在 class A 下会显得很难看,所以暂时不考虑此方法。
1
binux 2016-05-12 03:56:30 +08:00
class B(A)
|
2
Aether 2016-05-12 04:02:21 +08:00
不是很知道你的具体场景……最好先说明你想实现什么场景,再说功能。
也许是这个? class A(object): def __init__(self): self.var1 = Str self.var2 = [] self.var3 = {} class B(A) def operate1: [self.varX] def operate2 [self.varX] a = B() a.operate1() a.operate2() b= B() b.operate1() b.operate2() 然而却看不出来这么做有什么意义。 |
3
soratadori OP 对了,补充一点, class B 是包含有初始化步骤的。
class B 不仅存储数据,实例化后的数据会保存到 实例化的 class A 里面。 operate 不仅要对自身操作,还要对 class A 里的数据操作。(例如改一个名字,那也要改 class A 里的索引表) 总的来说 class A 是存储总数据用的。 我也有试过 classs B(A),没记错的话,是访问不到 a.varX 的,不过现在代码不在手边...... @Aether |
4
soratadori OP 我也不清楚一个类里的操作像这样稍微复杂一点(管到外面)是不是很不好,还是只管自己就行。
我想这么做是因为除了 class B 还有 class C D E F G ,这些稍微复杂一点的操作如果全部写在 class A 下面的话,会显得比较散乱 |
5
oott123 2016-05-12 06:37:07 +08:00 via Android
把 a 存在 B 的实例变量里( b.x = new A()),然后用 self.x.y 去调用。
|
6
msg7086 2016-05-12 06:47:07 +08:00
你这个应该属于变量绑定的范畴吧……
要么把变量注入目标对象里,要么用全局变量咯。 |
7
jixiangqd 2016-05-12 10:25:11 +08:00
你是要干什么?觉得这并不是良好的实践,相当于写死了代码,而且安全性不高。
建议组合使用策略模式 + 工厂 or 抽象工厂,进行对象绑定,然后通过 self 访问被绑定对象。 |
8
Aether 2016-05-12 14:59:21 +08:00
@soratadori 你还是没说你要干嘛……抽烟未必都要用打火机来点燃,火柴其实也可以的。
|