在main.py中重用类的方法

时间:2018-11-28 01:26:53

标签: python

我已经搜索了很多有关如何重用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 (),一切都会好起来的。但问题是我需要保留它

2 个答案:

答案 0 :(得分:1)

main.py 中的这一行:

c = Myclass()

调用此函数:

class Myclass:
    def __init__(self, x):
        self.thisX = x

每次创建Myclass实例时,它将调用__init__()函数。您声明它采用2个参数:selfxself总是隐式传递,因为它是一个类,但是您需要给它一个参数'x'。

例如,您可以将 main.py 更改为此:

c = Myclass(2) # here x = 2
c.printing(1)

请阅读this for more information

此外,类名通常以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应该与此类定义一起正常工作。但是,该设计对我来说有点奇怪。可能是因为我不清楚checkprinting方法的实际作用以及参数zprinting方法中的作用。如果您提供更多的见解,也许人们可以为您提供更好的设计。