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