python:有没有允许在对象外部使用类函数的做法?



我只是想说我是OOP的新手,所以我不确定我应该在那里做什么。假设我有一个类里面有一大堆关于data的函数:

class stuff:
def __init__ ...
def func1(self, arg1, arg2)
self.var1=arg1*self.var3
self.var2=arg2*self.var4
...

func1使用了类中的许多变量(使用self),并且我有许多函数和许多变量,这在类中非常方便。然而,每隔一段时间,我还需要在对象之外的数据上使用该函数。在这种情况下,我必须将var3和var4传递给函数我不知道怎么做。实际上,我需要传递大约10个变量。

有什么好办法吗?我是否应该为使用外部对象的每个函数做一个副本?但是这里有很多函数,它们都很长,我必须去掉self。在每个变量之前,将很难维护。

我应该为我想要处理的所有数据创建一个对象吗?这也很烦人,init是否有很多东西需要完整的数据,并将其移动到单独的函数将创建大量的数据。

我应该在类内部的函数只是调用类外部的函数吗?有两个问题,我必须给它们取不同的名字并记住两个名字,如果我传递的数据非常大怎么办?还是有别的方法?

所以我想知道是否有什么东西可以修复python,因为我不知道该谷歌什么。我注意到很多图书馆都使用"在它们的函数名中,所以我认为这些是在类中的函数,但我似乎在我的数据上使用它们,而不创建对象

func1使用了大量来自类的变量(使用self)有很多函数和很多变量,这是非常方便在一个类

这显然违反了单一职责原则,因此您应该考虑将类拆分为多个类,每个类负责一种输入数据并处理对其的操作。

我相信你在问你是否可以使用一个类的成员函数,其中self引用另一个对象,它从中读取其成员数据(这是可能的,如果其他对象具有与原始类同名的成员)或更有可能,你有一对自由浮动(不是类变量)变量……或者您的其他类没有具有完全相同名称的成员

在第二种情况下,最好的做法是创建一些独立的函数,它接受几个形参(或者,更简洁的做法是,一个类包含所有的参数),然后让类引用这个过程,而不是将它放在类中。这样做的原因是,如果在多个地方需要这种行为,那么您正在编写的类实际上可能不应该首先负责它。

下面是您需要的语法的一个快速示例:

class MyFirstClass:
def __init__(self, name):
self.name = name
@staticmethod
def static_function():
print("Static function called!")
def instance_function(self):
print("Instance function called on ", self.name)


class MySecondClass:
def main():
MyFirstClass.static_function()
anInstance = MyFirstClass("Adam")
anotherInstance = MyFirstClass("Bob")
anInstance.instance_function()
anotherInstance.instance_function()

MySecondClass.main()

我不会说这是否是一个好的设计原则(它不是),但我自己犯了方便的罪。这还假定类仍将被实例化,并且您将使用一些self属性,而不是全部。如果不是这种情况,请参阅有关静态方法的其他答案

class Stuff:
def __init__() ...
def func1(self, arg1, arg2, arg3=None, arg4=None)
if arg3=None:
self.var1=arg1*self.var3
else:
self.var1=arg1*arg3
self.var2=arg2*self.var4

实际上我需要传递大约10个变量

在这种情况下,您可以使用kwargs并在函数

中解包它们。

最新更新