来自具有不同变量的模块的类

时间:2015-10-09 11:57:12

标签: python class import module

用语言表达我的问题非常困难。基本上我让这些类处理 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_oneobject_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 中有两个以上的类,并且有两个以上的模块 a b 我不想使用为每个类在 modules _ * .py 中设置的类变量。

2 个答案:

答案 0 :(得分: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)应包含:

x = 7 # in module_b.py x = 13

然后,你的主要计划:

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中你不需要在类定义中使用对象。

答案 1 :(得分:0)

我现在用类变量做了。不幸的是,这需要确定新的子类和重复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就会产生大量开销。