我已经搜索了很多有关如何重用main.py文件中的类的方法的信息。我有一些类似的基本解决方案,但就我而言有点不同。
/lib/module.py
-Xms2048m -Xmx8182m -Duse_jetty9_runtime=true -D--enable_all_permissions=true -Ddatastore.backing_store=D:\workspace\\local_db.bin
/main.py
class Myclass:
def __init__(self, x):
self.thisX = x
def check(self):
if self.thisX == 2:
print("this is fine. going to print it")
self.printing()
# this method will use in this class and must use from the main.py
# the parameter "z" is gonna use only when the method will call from main.py
def printing(self, z):
if z == 1 :
print("we got ", z)
else:
print(self.x)
错误
from lib.module import Myclass
# this is how i use the check() method once in my main.py
Myclass(2).check()
# the Myclass() gets "2" only once at the beginning of the program...
# i don't wanna pass "2" to the Myclass() everytime that i wanna use the printing() method...
c = Myclass()
c.printing(1)
测试:
如果我不使用def init (),一切都会好起来的。但问题是我需要保留它
答案 0 :(得分:1)
main.py 中的这一行:
c = Myclass()
调用此函数:
class Myclass:
def __init__(self, x):
self.thisX = x
每次创建Myclass实例时,它将调用__init__()
函数。您声明它采用2个参数:self
和x
。 self
总是隐式传递,因为它是一个类,但是您需要给它一个参数'x'。
例如,您可以将 main.py 更改为此:
c = Myclass(2) # here x = 2
c.printing(1)
此外,类名通常以CapWords样式编写,因此it's a good idea可以调用类MyClass
而不是Myclass
编辑:
由于您不想将x
传递给__init__()
,并且想从 main.py 设置x
,因此可以尝试执行以下操作:
class Myclass:
x = 0
def check(self):
if self.x == 2:
print("x is 2")
在 main.py 中,您可以执行以下操作:
Myclass.x = 2; #this only needs to be done once
Myclass().check()
输出:
x is 2
答案 1 :(得分:0)
我认为@richflow的答案很重要。如果某个变量将由类的所有实例共享,则使用Myclass.x = new_number
分配其值是合乎逻辑的。然后,此类的所有实例都将知道更改。
如果您确实想在实例的__init__
方法中更改x,您仍然可以这样做。结合@richflow的代码,它看起来可能如下所示。
class Myclass:
x = 0
def __init__(self, x=None):
if x is not None:
Myclass.x = x
# other codes for initializiing the instance
def check(self):
if Myclass.x == 2:
print("this is fine. going to print it")
def printing(self, z=0):
if z == 1 :
print("we got ", z)
else:
print(Myclass.x)
我尝试不对您的代码进行太多更改。您的main.py
应该与此类定义一起正常工作。但是,该设计对我来说有点奇怪。可能是因为我不清楚check
和printing
方法的实际作用以及参数z
在printing
方法中的作用。如果您提供更多的见解,也许人们可以为您提供更好的设计。