Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.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_Class - Fatal编程技术网

python中在另一个类中创建类的正确方法是什么?

python中在另一个类中创建类的正确方法是什么?,python,class,Python,Class,我正在学习python,我知道我下面所做的是正确的还是有更好的编写方法 class FUNC: def __init__(self,a,b): self.a = a self.b = b def Add(self): x = self.a + self.b return x def Sub(self): y = self.a - self.b return y class T

我正在学习python,我知道我下面所做的是正确的还是有更好的编写方法

class FUNC:
    def __init__(self,a,b):
        self.a = a
        self.b = b
    def Add(self):
        x = self.a + self.b
        return x
    def Sub(self):
        y = self.a - self.b
        return y

class TASKS:
    def tsk1(self):           
        PrintObj1 = FUNC(10,20)
        print(PrintObj1.Add())
    def tsk2(self):
        PrintObj2 = FUNC(100,50)
        print(PrintObj2.Sub())

class RUNTASK:
    Obj = TASKS()
    Obj.tsk1()
    Obj.tsk2()

是的,您的代码看起来是正确的,但是您也可以使用只包含静态方法的
TASKS
类。静态方法是属于类而不是类实例的方法,因此不需要创建类实例来调用静态方法(在这种情况下很方便):


这里要做的是在一个类的方法中创建另一个类的对象。如果要显示
FUNC
类完全属于
任务
,可以执行以下操作:

class TASKS:
    class FUNC:
        def __init__(self,a,b):
            self.a = a
            self.b = b
        def Add(self):
            x = self.a + self.b
            return x
        def Sub(self):
            y = self.a - self.b
            return y

    @staticmethod
    def tsk1():
        PrintObj1 = TASKS.FUNC(10,20)
        print(PrintObj1.Add())

    def tsk2(self):
        PrintObj2 = self.FUNC(100,50)
        print(PrintObj2.Sub())


TASKS.tsk1()

obj = TASKS()
obj.tsk2()

这称为内部类或嵌套类。这在Python中并不常见。此外,我还展示了访问内部类的两种方法,一种是使用实例方法,另一种是使用@ArtsiomPraneuski建议的静态方法(在这里似乎更合适)。

看起来绝对不错,您可能是在
Obj=TASKS
而不是
Obj=TASKS()
之后?除非大写字母是常量,否则不应该真正使用大写字母作为变量。
RUNTASK
看起来应该是一个函数,而不是一个类。拥有
RUNTASK
对象意味着什么?
class TASKS:
    class FUNC:
        def __init__(self,a,b):
            self.a = a
            self.b = b
        def Add(self):
            x = self.a + self.b
            return x
        def Sub(self):
            y = self.a - self.b
            return y

    @staticmethod
    def tsk1():
        PrintObj1 = TASKS.FUNC(10,20)
        print(PrintObj1.Add())

    def tsk2(self):
        PrintObj2 = self.FUNC(100,50)
        print(PrintObj2.Sub())


TASKS.tsk1()

obj = TASKS()
obj.tsk2()