首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在外部类内实现唯一的方法类

如何在外部类内实现唯一的方法类
EN

Stack Overflow用户
提问于 2022-05-15 04:53:03
回答 1查看 30关注 0票数 0

我有一个外部类来表示我的数据idk。在类idk中,我希望有另一个类change,它将包含各种方法来更改类idk的实例。我试过的是下面。注意:这是我实际代码的一个简化示例。

代码语言:javascript
复制
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‘

如何更改代码以使其工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-15 05:26:10

首先,您将得到这个错误,因为您是作为一个类属性访问func函数,而不是通过它的一个实例来访问它(将类定义放在另一个类中不会使它成为一个实例)。

如果有意义的话,云直接将这些“更改方法”放在idk类中(这是一种正常的方法):

代码语言:javascript
复制
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实例作为第一个参数:

代码语言:javascript
复制
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类:

代码语言:javascript
复制
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的实例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72245584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档