我有一个外部类来表示我的数据idk。在类idk中,我希望有另一个类change,它将包含各种方法来更改类idk的实例。我试过的是下面。注意:这是我实际代码的一个简化示例。
class idk:
def __init__(self):
self.x=1
self.y=2
class change:
def func(self):
self.x=10
self.y=100
var=idk()
var.change.func()
print(var.x, var.y)然而,这给出了错误: TypeError: func()缺少一个必需的位置参数'self‘
如何更改代码以使其工作?
发布于 2022-05-15 05:26:10
首先,您将得到这个错误,因为您是作为一个类属性访问func函数,而不是通过它的一个实例来访问它(将类定义放在另一个类中不会使它成为一个实例)。
如果有意义的话,云直接将这些“更改方法”放在idk类中(这是一种正常的方法):
class idk:
def __init__(self):
self.x = 1
self.y = 2
def func(self):
self.x = 10
self.y = 100
var = idk()
var.func()
print(var.x, var.y) # Output: 10 100如果您确实希望/需要分离这些方法,可以执行另一个类。实现该类的方式是使用静态方法,其中所有方法都接收idk实例作为第一个参数:
class idk:
def __init__(self):
self.x = 1
self.y = 2
class idkChanger:
@staticmethod
def func(idk_obj):
idk_obj.x = 10
idk_obj.y = 100
var = idk()
idkChanger.func(var)
print(var.x, var.y) # Output: 10 100如果您真的希望/需要在idk类中包含"changer“类,您可以在那里定义它,但这一点并不常见。另外,您还必须传递实例,即Changer类:
class idk:
def __init__(self):
self.x = 1
self.y = 2
class Changer:
@staticmethod
def func(idk_obj):
idk_obj.x = 10
idk_obj.y = 100
var = idk()
idk.Changer.func(var)
print(var.x, var.y) # Output: 10 100最后注记:
您不能将func标记为静态的,而且它也会同样工作,但是这会带来更多的混淆,原因有几个(例如,您会在技术上说func是一个实例方法。但事实并非如此,因为要更改的对象不是Change的实例,而是idk的实例。
https://stackoverflow.com/questions/72245584
复制相似问题