我是python的新手,这是我在python中的第一个程序,我想知道如何访问类外的类变量。我有一个代码会引发一些错误
from xxxxxxx import Products
class AccessKey(object):
def key(self):
self.products = Products(
api_key = "xxxxxxxxxxxxxxxxxxxxxx",
api_secret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
)
class Data(AccessKey):
def Print(self):
products.products_field( "search", "Samsung Galaxy" )
results = products.get_products()
print "Results of query:\n", results
data = Data()
data.Print()
以上程序抛出以下错误
Traceback (most recent call last):
File "framework.py", line 10, in <module>
class Data(AccessKey):
File "framework.py", line 13, in Data
results = products.get_products()
NameError: name 'products' is not defined
答案 0 :(得分:2)
首先,您需要将产品字段称为 self.products。(等)
看起来你不一定要实例化&#34;产品&#34;在你打电话之前。如果你想确保它被实例化,那么你需要在父类的构造函数中设置产品(AccessKey)
一个简化的例子是:
class A (object):
def __init__ (self):
self.x = 1
class B (A):
def get (self):
return self.x
b = B ()
print (b.get ())
基本上,您必须将以下构造函数添加到第一个类
class AccessKey(object):
def __init__(self):
self.products = Products (X, Y) # or whatever you want to initialize it to
# the rest of your code below
或者,你可以做得更好并创建一个set_product函数:
# inside of the parent class
def set_product (self, X, Y):
try:
self.products.product_field (X, Y)
except NameError:
self.products = Product (X, Y)
答案 1 :(得分:0)
班级Data
继承自AccessKey
。因此,products
可以使用类属性Data
,但是,您需要通过
self.products.products_field(...)
代替products.products_field(...)
。
同样,它应该是results = self.products.get_products()
但请注意,实例属性产品仅在调用方法key
时设置,因此在调用NameError
方法之前,您将获得key
,即
data = Data()
data.key()
data.Print()
此外,在python中不鼓励使用getter和setter,并且对代码格式化指南施加了很多压力。在您的代码中,类方法应该小写,但因为print
会影响一个保留的单词,所以print_
之类的东西会更好。