Python:未创建对象
请查看以下方法:Python:未创建对象,python,class,allocation,Python,Class,Allocation,请查看以下方法: def load_ad_mediums_from_file(self, filename ): file = io.open( filename, "r" ) ad_mediums = {} for line in file: if len(line) > 0 and line[0] != 'a': parts = line.strip().split(";") ad_medium =
def load_ad_mediums_from_file(self, filename ):
file = io.open( filename, "r" )
ad_mediums = {}
for line in file:
if len(line) > 0 and line[0] != 'a':
parts = line.strip().split(";")
ad_medium = Objects.Ad_Medium()
ad_medium.id = int( parts[0] )
for i in range(1,8):
cat_parts = parts[i].strip().split(",")
category_id = int(cat_parts[0]);
ad_medium.categories[category_id] = float(cat_parts[1])
ad_medium.impressions[category_id] = int(cat_parts[2])
ad_mediums.update( { ad_medium.id : ad_medium } )
file.close()
return ad_mediums
问题是:尽管文件中的每一行都不同,但ad_mediums字典中的值都是相同的。在我看来,创建一个新对象“ad_media=Objects.ad_media()”似乎没有效果,只是简单地覆盖了上一个循环对象的值
我怎样才能解决这个问题
编辑:Ad_中级课程
class Ad_Medium(object):
id = 0
categories = { 1:0.0, 2:0.0, 3:0.0, 4:0.0, 5:0.0, 6:0.0, 7:0.0 }
impressions = { 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0 }
def __str__(self):
string = str(self.id) + ";"
for i in range(1,8):
string += str(i) + "," + str( self.categories[i] ) + "," + str( self.impressions[i] ) + ";"
return string[:-1] + "\n"
def normalize_categories_with_impressions(self ):
impressions = 0.0
for i in range(1,8):
impressions += float(self.impressions[i])
if impressions == 0.0:
return
for i in range(1,8):
self.categories[i] = float(self.categories[i])/float(impressions)
def reset_categories(self):
for i in range(1,8):
self.categories[i] = 0
在类定义中,id、类别和印象是类属性(由所有实例共享)。
ad_medium.id=int(parts[0])
语句定义了一个“id”实例属性,但对类别和印象(不是反弹而是变异)的所有操作都对类属性起作用。您希望您的类定义具有一个初始值设定项方法,您可以在其中创建实例属性,即:
class Ad_Medium(object):
def __init__(self):
self.id = 0
self.categories = { 1:0.0, 2:0.0, 3:0.0, 4:0.0, 5:0.0, 6:0.0, 7:0.0 }
self.impressions = { 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0 }
我强烈建议您进一步了解Python的对象模型、属性查找规则等。在类定义中,id、类别和印象是类属性(由所有实例共享)。
ad_medium.id=int(parts[0])
语句定义了一个“id”实例属性,但对类别和印象(不是反弹而是变异)的所有操作都对类属性起作用。您希望您的类定义具有一个初始值设定项方法,您可以在其中创建实例属性,即:
class Ad_Medium(object):
def __init__(self):
self.id = 0
self.categories = { 1:0.0, 2:0.0, 3:0.0, 4:0.0, 5:0.0, 6:0.0, 7:0.0 }
self.impressions = { 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0 }
我强烈建议您进一步了解Python的对象模型、属性查找规则等。您能发布
Ad\u Medium
类的相关部分吗?某些内容可能是类级别(例如,类别
)而不是实例级别。您可以发布广告媒体
类的相关部分吗?某些内容可能是类级别(例如,类别
),而不是实例级别。