如何在外部 class 中实现唯一的 class 方法
How to implement a sole class of methods inside an external class
我有一个外部 class 来表示我的数据 idk
。在 class idk
中,我想要另一个 class change
,它将包含各种方法来更改 class 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)
然而,这给出了错误:
类型错误:func() 缺少 1 个必需的位置参数 'self'
如何更改代码以使其工作?
好吧,首先,您收到此错误是因为您正在访问 func
函数作为 class 属性而不是它的实例(将 class另一个 class 中的定义不会使其成为实例)。
如果有道理,你云把那些“改变方法”直接放在 idk
class 中(这将是一个正常的方法):
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
如果您真的want/need 将这些方法分开,您可以再做一个class。我实现 class 的方法是使用静态方法,其中所有方法都接收一个 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
如果你真的 want/need 在 idk
class 里面有那个“转换器” class 你可以在那里定义它,但这在全部。此外,您还必须传递实例,即 Changer class:
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
的实例)。
我有一个外部 class 来表示我的数据 idk
。在 class idk
中,我想要另一个 class change
,它将包含各种方法来更改 class 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)
然而,这给出了错误: 类型错误:func() 缺少 1 个必需的位置参数 'self'
如何更改代码以使其工作?
好吧,首先,您收到此错误是因为您正在访问 func
函数作为 class 属性而不是它的实例(将 class另一个 class 中的定义不会使其成为实例)。
如果有道理,你云把那些“改变方法”直接放在 idk
class 中(这将是一个正常的方法):
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
如果您真的want/need 将这些方法分开,您可以再做一个class。我实现 class 的方法是使用静态方法,其中所有方法都接收一个 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
如果你真的 want/need 在 idk
class 里面有那个“转换器” class 你可以在那里定义它,但这在全部。此外,您还必须传递实例,即 Changer class:
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
的实例)。