簡體   English   中英

如何從python中的類中的方法調用該類以重新定義變量?

[英]how to call a the class from a method within the class in python to redefine a variable?

我在使用定義此類對象的同一類中的方法重新定義我創建的對象時遇到了一些問題。 我寫了一個小的python示例。 在這里,我試圖使用dog類中的一種方法來創建一個名為dog3的對象,該對象會自行調用以更改其dog3.getDogName。 當我打印dog3名稱時,對init的調用未生效。 有誰知道如何執行此操作?

我希望得到一個輸出

woofy最大熊

但是我不再忍受熊了。

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程序員會知道如何執行這樣的操作。

提前謝謝你的幫助。

您的代碼已定義方法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

除非要克隆某些參數,否則不要創建實例構造函數。 可能會造成混亂。

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM