2015-02-09 197 views
0

我做了计算程序的建筑物的电耗从建筑的特点出发,像公寓的数量和类型的节目,我的意思是所有不需要是例如相同大小的,所以我创建了一个名为公寓类,像这样:创建和Python的实例化对象时运行

class apartamento: 


    def __init__(self): 
     self.area = 0 
     self.cantidad = 0 
     self.altura = 0 
     self.personas = 0 
     self.area = 0 
     self.dotacion = 0 
     self.cto_alum = 0 
     self.cto_tug = 0 
     self.cto_e = 0 

所以我可以让我们说30个公寓的80米100平方公尺和其他15^2十五岁的我想要:

type1 = apartamento() 
type2 = apartamento() 


type1.area = 100 
type2.area = 80 

但是因为我不知道有多少类型的公寓,我需要创建它们时,程序运行在一个循环例如

当我说我不知道​​有多少类型的公寓,我指的是这可以用于别人在型动物套建筑,所以在一个它可以仅1种其他的公寓,并可以是十,而这必须是对用户透明,现在我有一个微调框放多少类型的公寓是,然后我创建一个表,把他们的所有数据,他们的大小,人数,电路数量,问题是,他们我必须对这些数据做一些计算,所以我想实例化每种类型作为一个对象与表中的属性,现在我不知道会有多少类型,它取决于建筑物。

+2

这不是真的清楚你要我们回答什么。你是否理解了python中的['list'](https://docs.python.org/2/tutorial/datastructures.html)的概念以及如何操作它们? – aruisdante 2015-02-09 00:11:30

+0

使用的按键名称将是一个很好的方法将它们存储在一个字典,唯一的问题是区分每个不同类型的 – 2015-02-09 00:14:19

+0

我认为做到这一点,并使用尽可能多的,因为我需要的,但他们,我将不得不把一个大数目列表中的元素,以确保永远不会出界 – 2015-02-09 00:26:25

回答

0

最复杂的解决方案使用了一个重载特性,他们纳入某种守护进程的这个问题。例如nginx

service nginx reload 

将使用新的配置参数更新站点,而不必实际重新启动服务器。

在你的情况,因为这听起来像一个更简单的程序,你可以永远只是有一个Python的配置文件,并在设定的时间间隔从中读取。

import imp 
config_module = imp.load_source("config", "/path/to/config.py") 

,并且配置中可能看起来像

CONFIG = { 
    "type1": { 
     "altura": 10, 
     "personas": 2, 
     "cantidad": 5, 
    }, 
    "type2": { 
     ... 
    } 
} 

在一定的时间间隔,你可以只问你的程序来查找配置模块的源,然后你将不必担心你配置是最新的。

如果不是这样,你可以停止你的程序,然后以搭载了最新的更改,而不必等待你的配置重新加载再次运行。

后的配置更新,你的愿望

apartmentos = {} 
for type, values in config_module.CONFIG.iteritems(): 
    apartmentos[type] = Aparatmento(values) 

您可以创建新公寓的对象在哪里Apartmento现在接受配置

class Apartmento(object): 
    def __init__(self, config): 
     personas = config["personas"] 
     altura = config["altura"] 
     ... 
+0

我喜欢使用字典的想法,但我遇到了一些问题,特别是使用python命令它们的条件,我把它们放在一个特定的顺序,他们把列表中的键显示出来,我以明显随机的方式得到它们并且一些键名被遗漏。 for key in dic .... list [i] = key - – 2015-02-09 02:31:06

+0

我的意思是说,当您打印字典时,按键排序的方式很重要吗?字典只是用来作为您的不同类型的公寓的存储设备。如果有一个关键缺失,那么你应该检查你的代码,以确保每个公寓类型正确迭代。另外,如果您有重复名称的密钥,他们的数据将被覆盖 – Greg 2015-02-09 07:26:20

0

的一个新的字典不知道它究竟是什么,你需要,这是我的承担。 这很可能是最愚蠢的做法。这在我看来就像所有要制作的是一些固定数量的公寓,其中有些是1型,其中一些是类型公寓2

类型的建设不健全,给我喜欢的事,是预设的,但更像是每个建筑物及其计划特有的东西。 I.E.部分建筑物分为两类,一类为100平方公尺和80平方公尺,一部分为90和50平方米。

`class apartment: 
    def __init__(self, area): 
     self.area = area 

class building: 
    def __init__(self, ntypesOfapartments): 
     self.ntypesOfapartments = ntypesOfapartments 
     self.apartments = list() 
     for i in range(ntypesOfapartments): 
      area = input("Area of {0}. type of apartment: ".format(i)) 
      n = input("Number of apartments of area {0}: ".format(area)) 
      for j in range(int(n)): 
       self.apartments.append(apartment(area)) 

    def __str__(self): 
     desc = "Building has {0} types of apartments \n".format(self.ntypesOfapartments) 
     desc += "Total number of rooms is {0}.".format(len(self.apartments)) 
     return desc 

因此,您可以使用n种不同的公寓类型实例化建筑物,然后在解释器中交互式定义您的公寓类型。

>>> test = building(2) 
Area of 0. type of apartment: 100 
Number of apartments of area 100: 5 
Area of 1. type of apartment: 80 
Number of apartments of area 80: 10 
>>> print(test) 
Building has 2 types of apartments 
Total number of rooms is 15. 
>>> 

当然,这将是好了很多,使用更无意义的数据结构比单持有公寓,像一本字典。这样,你可以在字典中访问的公寓类型1下,你可以有符合您定义的类型1.

这也,所有公寓的列表非常依赖于你想与他们做计算的类型?这些计算中必须使用的所有重要数据是什么?在这个例子中,我只实例化了公寓区域,如果发现其中的人数对您的计算很重要,那么手动实例化所有这些都是没有意义的。此外,你是什么意思,你不知道有多少公寓类型?你认为什么是“运行Python程序”?你的意思是翻译,还是你在写别的东西?