由于无法识别操作名称而导致错误

Spe*_*ick 2 python

我是Python的新手.试图让以下代码工作:

class Portfolio:
    def __init__(self, balance={}):
        self.__balance = balance.copy()

    def initSym(self, sym):
        if not sym in self.__balance:
            self.__balance[sym] = 0

    def invest(self, amt, fx):
        initSym(fx)
        self.__balance[fx] += amt

    def divest(self, amt, fx):
        initSym(fx)
        self.__balance[fx] -= amt

    def getBalance(self, fx):
        initSym(fx)
        return self.__balance[fx]

    wallets = {'Paul':Portfolio({}),'Anne':Portfolio({'USD':200}),'John':Portfolio({'CHF':500,'GBP':11000})}

    wallets['Anne'].getBalance('CHF')
Run Code Online (Sandbox Code Playgroud)

但是这会给出错误:

NameError: name 'initSym' is not defined
Run Code Online (Sandbox Code Playgroud)

Gre*_*Guy 5

如果你已经习惯了C或Java,这对你来说可能看起来很奇怪,因为你试图从类的其他方法中调用一个类的方法而且它不起作用.

Python在处理这个方面有点奇怪.每个类方法实际上只是绑定到类的独立方法,它将类的实例作为其第一个参数.因此,如果您想在其中一个方法中使用该类的其他方法之一,那么请不要这样做

initSym(fx)
Run Code Online (Sandbox Code Playgroud)

你必须做

self.initSym(fx)
Run Code Online (Sandbox Code Playgroud)