这就是我想要做的 在类中调用静态方法来填充类变量。
import sys
import os
from HelpingData import *
class Inventory(object):
shipping_cost = 400.0
total_stock = calculate_total_stock.__func__()
def __init__(self, attributes={}):
self.inventory = {}
if attributes is None:
self.inventory = {}
else:
for key in attributes:
self.inventory[key] = attributes[key]
def getValue(self,attribute):
return self.inventory[attribute]
def setValue(self,attribute,value):
self.inventory[attribute]=value
@staticmethod
def calculate_total_stock():
total_stock = dict((item, 0) for item in product_names)
for nation in product_stock:
for item in nation:
total_stock[item] += nation[item]
return total_stock
这就是我得到的错误..
> total_stock = calculate_total_stock.__func__()
NameError: name'calculate_total_stock' is not defined
有人可以建议我,我在这里缺少什么,我是python的新手。 1天
答案 0 :(得分:1)
Inventory
定义顶层的代码(即类属性和方法定义)在名称Inventory
存在之前运行,因此您无法调用它定义中有自己的方法。如果你有@staticmethod
,它不需要任何类或实例参数,为什么不把它移到外面呢?
def calculate_total_stock(product_names, product_stock):
total_stock = dict((item, 0) for item in product_names)
for nation in product_stock:
for item in nation:
total_stock[item] += nation[item]
return total_stock
class Inventory(object):
SHIPPING_COST = 400.0
TOTAL_STOCK = calculate_total_stock(product_names, product_stock)
def __init__(self, attributes=None):
self.inventory = {}
if attributes is not None:
for key in attributes:
self.inventory[key] = attributes[key]
def get_value(self, attribute):
return self.inventory[attribute]
def set_value(self, attribute, value):
self.inventory[attribute] = value
请注意,我已经做了一些整理,特别是在style方面,并明确了calculate_total_stock
的参数。
答案 1 :(得分:1)
在这里您真的不需要任何解决方法,只需为调用方法提供额外的指导。
在下面的示例中,您可以在其定义类的内部和外部调用 PrintThis() 方法。
外部:
照常打电话
内部:
您必须添加 self 或包含类
class MyClass:
def __init__(self):
self.MyValue = 0
def IncrementValue(self):
self.MyValue += 1
PrintThis(f'From MyClass {self.MyValue}')
@staticmethod
def PrintThis(arg):
print(f'My Value: {arg}')
class MyClass:
def __init__(self):
self.MyValue = 0
def IncrementValue(self):
self.MyValue += 1
self.PrintThis(f'From MyClass {self.MyValue}')
@staticmethod
def PrintThis(arg):
print(f'My Value: {arg}')
class Run:
def __init__(self):
mc = MyClass()
MyClass.PrintThis('From Outside')
mc.IncrementValue()
mc.IncrementValue()
My Value: From Outside
My Value: From MyClass 1
My Value: From MyClass 2
我不确定:-)
我唯一注意到的是静态方法(PrintThis)是一个函数,而非静态方法是一个绑定方法。
我确信在 Python 文档中对这种行为有一些解释。如果你查了,请分享:-)
我知道这个问题在这一点上已经有几年了,但是当我用谷歌搜索错误时,这是第一个命中。