Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 不使用主文件中的变量调用外部类_Python - Fatal编程技术网

Python 不使用主文件中的变量调用外部类

Python 不使用主文件中的变量调用外部类,python,Python,我遇到了一个问题,在类A中调用方法时,我需要设置值或调用其他类中的一些函数,但我需要将它们全部放在同一个python文件中,这真的很长很难看 . 有没有合适的方法把它写干净 理想情况下,我希望这些类可以在单独的python文件中 A类: 定义初始化(自): 超级(A,self)。\uuuu init\uuuuu() 自我价值=10 def设置(自身、新_值): self.value=新值 #设置B值=新的_值*2 c、 b.set(新的_值*2) #设置C值=新值/2 c、 值=新值/2 B类:

我遇到了一个问题,在类A中调用方法时,我需要设置值或调用其他类中的一些函数,但我需要将它们全部放在同一个python文件中,这真的很长很难看 . 有没有合适的方法把它写干净

理想情况下,我希望这些类可以在单独的python文件中

A类:
定义初始化(自):
超级(A,self)。\uuuu init\uuuuu()
自我价值=10
def设置(自身、新_值):
self.value=新值
#设置B值=新的_值*2
c、 b.set(新的_值*2)
#设置C值=新值/2
c、 值=新值/2
B类:
定义初始化(自):
super(B,self)。\uuuuu init\uuuuuuu()
自我价值=10
def设置(自身、新_值):
self.value=新值
C类:
定义初始化(自):
super(C,self)。\uuuuu init\uuuuuuu()
self.value=1
self.a=a()
self.b=b()
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
c=c()
#类a函数被调用,然后类B和类C做一些事情。。。
c、 一套(100)
打印(c值)
打印(c.a.值)
打印(c.b.值)

有许多解决方案可以解决您的设计约束,但这里有一个解决方案可以消除依赖关系:

# imagine each of these classes are in their own projects (/A,/B,/C), in their own files (A.py, B.py, C.py)
class A:
    def __init__(self, c):
        self.value = 10
        self.c = c

    def set(self, new_value):
        self.value = new_value
        # set B value = new_value * 2
        self.c.b.set(new_value * 2)
        # set C value = new_value / 2
        self.c.value = new_value / 2

# class B as before

class C:
    def __init__(self, A, B):
        self.value = 1
        self.a = A()
        self.b = B()

# Now main.py
from A.A import A
from B.B import B
from C.C import C
if __name__ == '__main__':
    c = C(A, B)   # Pass in the classes A and B which C will instantiate
    # class a function is called then class B and class C do somethings ...
    c.a.set(100)
    print(c.value)
    print(c.a.value)
    print(c.b.value)

顺便说一句:一个不从另一个类派生的类不需要调用super init。

我不确定我是否完全理解这个问题,但听起来你好像不知道
import
语句?所有这些在我看来都是一个糟糕的设计。在
A.set
中,依赖变量
c
,该变量在设置代码中全局定义。我知道这是一个玩具的例子,但你希望实现什么样的耦合?A和C需要紧密耦合吗?您可以将C的一个实例传递给C上的A成员,并在调用.set()时更新C。您的意思是导入类的变量/实例吗?