2015-10-09 63 views
-1

用文字表達我的問題是非常困難的。 Basicly心中已經得到了類處理的base.py一切:來自具有不同變量的模塊的類

x = 3 
class object_one(object): 
    def __init__(self): 
     self.x = x+3 
class object_two(object): 
    def __init__(self): 
     self.x = x**2 
     self.y = object_one() 

這是我的基本對象。現在我需要​​和object_two多次做相同,但不同的變量x

module_a.py

from base import object_one, object_two # with x = 7 

module_b.py

from base import object_one, object_two # with x = 13 

但如何做模塊_ *。PY有像她那樣,我得到

import module_a, module_b 
print(module_a.object_one().x, module_a.object_two().y.x) # Output: 49 49 
print(module_b.object_one().x, module_b.object_two().y.x) # Output: 169 169 

因爲有兩個以上的班base.py和兩個以上的模塊一個b我不想使用modules_ *。py中爲每個類設置的類變量。話又說回來

x = 7 # in module_b.py x = 13 

,你的主要程序:

+0

你爲什麼想這樣做?你究竟在努力實現什麼?這聽起來好像是創建非常不可維護的代碼的好方法。 – barny

+0

*模塊_ \ *。py *不同**器件**(鎖定放大器,舞臺控制器等)。在* base.py *中有幾個容器(首選項,API,GUI,...)用於'x'中給出的每個設備的不同**模型**(例如,鎖定:斯坦福研究,信號恢復等)。 – Chickenmarkus

+0

爲什麼你在base.py的頂部有x = 3,當你需要時在對象構造中傳遞x作爲參數會不會更好? – scrineym

回答

1

考慮通過X和ObjectOne作爲參數:

class ObjectOne: 
    def __init__(self, x): 
    self.x = x 

class ObjectTwo: 
    def __init__(self, obj): 
     self.x = obj.x**2 
     self.y = obj 

然後module_a.py(和module_b.py)應包含

import base, module_a, module_b 

a1 = base.ObjectOne(module_a.x) 
a2 = base.ObjectTwo(a1) 

b1 = base.ObjectOne(module_b.x) 
b2 = base.ObjectTwo(b1) 

print(a1.x, a2.y.x) 
print(b1.x, b2.y.x) 

您沒有指定版本,我從print()假設它是Python3,但在Python3中,您不需要c中的對象低定義。

+0

不幸的是,您傳播'x'的方法不適用於我的具體問題。在現實中,'x'的一部分存儲在'object_one'中,另一部分存儲在'object_two'中。 – Chickenmarkus

0

我現在用class變量做了。不幸的是,這需要確定新的兒童類別並重復x

base.py

class object_one(object): 
    x = 3 
    def __init__(self): 
     self.x = type(self).x + 3 
class object_two(object): 
    x = 3 
    class_object_one = object_one 
    def __init__(self): 
     self.x = type(self).x**2 
     self.y = type(self).class_object_one() 

即G。 module_a.py

import base 

class object_one(base.object_one): 
    x = 7 
class object_two(base.object_two): 
    x = 7 
    class_object_one = object_one 

對每位模塊_ * PY大量的開銷只是改變x