在python中,如何从类中的方法调用类来重新定义变量?

2024-05-16 21:24:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我在重新定义一个对象时遇到了一些问题,这个对象是我在定义此类对象的同一类中使用方法创建的。我已经编写了一个小的python示例。在这里,我试图创建一个名为dog3的对象,使用dog类中的一个方法调用它自己来更改dog3.getDogName。当我打印dog3名称时,对init的调用没有生效。有人知道怎么做这个手术吗

我希望得到一个输出作为

胡飞 最大值 熊

但我不再是熊了,我又发晕了

import sys


class Dog():
    def __init__(self, name = 'woofy'):
        self.name = name

    def getDogName(self):
        return self.name

    def newDog(self, new_name):
        return Dog(new_name)


class Animals():
    def __init__(self, *args):

        dog1 = Dog()
        print(dog1.getDogName())

        dog2 = Dog('max')
        print(dog2.getDogName())

        dog3 = dog1
        dog3.newDog('bear')
        print(dog3.getDogName())


def mainApp(args):
    global app 
    app = Animals(args)

if __name__ == "__main__":
    mainApp(sys.argv)

我相信一个有python编程经验的程序员会知道如何做这样的操作

提前谢谢你的帮助


Tags: 对象方法nameself定义initdefsys
3条回答

NewDog方法“返回”一个新的Dog实例,但它不会更改它是什么,因此如果要更改当前Dog实例的名称,请执行以下操作:

class Dog():
    def change_name(self, new_name):
        self.name = new_name

如果要获取另一个Dog实例,请执行以下操作:

class Dog(object):
  @staticmethod
  def new_dog(new_name):
      return Dog(new_name)

您的代码定义了方法newDog,以返回Dog的新实例

您的代码还为dog3分配了一个Dog的实例,但是当您的代码调用dog3.newDog(...)时,返回值不会分配给任何对象。因此,新创建的Dog实例毫无用处

你也许应该考虑这样做

    dog3 = dog1.newDog('bear')
    print(dog3.getDogName())

newDog正在创建一个新狗,而不是修改旧狗

如果您想newDog归还一只新狗,请执行以下操作:

dog3 = dog1.newDog("bear")

或者你真的应该

dog3 = Dog("bear")

如果希望newDog修改当前Dog实例,请执行以下操作:

def renameDog(self, new_name):
    self.name = new_name

除非要克隆某些参数,否则不要生成实例构造函数。这会让人困惑

相关问题 更多 >