当程序运行时,在python中创建并实例化对象

当程序运行时,在python中创建并实例化对象,python,instantiation,Python,Instantiation,我正在制作一个程序,从建筑物的特征开始计算建筑物的耗电量,比如公寓的数量和类型,我的意思是所有的房间都不需要大小相同,例如,所以我创建了一个叫做公寓的类,类似这样: class apartamento: def __init__(self): self.area = 0 self.cantidad = 0 self.altura = 0 self.personas = 0 self.area = 0

我正在制作一个程序,从建筑物的特征开始计算建筑物的耗电量,比如公寓的数量和类型,我的意思是所有的房间都不需要大小相同,例如,所以我创建了一个叫做公寓的类,类似这样:

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套公寓,15套100平方米,其他15套80平方米,我想要:

 type1 = apartamento()
 type2 = apartamento()


type1.area = 100
type2.area = 80
但是因为我不知道有多少种类型的公寓,所以我需要在程序在循环中运行时创建它们


当我说我不知道有多少种类型的公寓时,我指的是这样一个事实,即这可以用于其他人,在不同的建筑中,因此在一种类型中,可能只有一种类型的公寓,在另一种类型中,可能是十种类型的公寓,这必须对用户透明,现在我有一个旋转框来记录公寓的类型,然后我创建了一个表格来记录公寓的所有数据,它们的大小,人数,电路数量,问题是,我必须对这些数据进行一些计算,所以我想将每种类型的公寓实例化为一个对象,表中有一个中庭,现在我不知道会有多少种类型,这取决于构建。

大多数复杂的程序都使用重新加载功能来解决此问题,这些程序将重新加载功能合并到某种守护进程中。例如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"]
        ...

不知道你到底需要什么,这是我的看法。 这很可能是最愚蠢的方法。在我看来,你想要创建的是一个有固定数量公寓的建筑,其中一些是1型的,一些是2型的

对我来说,公寓的类型听起来不像是预设的,更像是针对每栋建筑及其规划的。也就是说,一些建筑的公寓分为两类,100m^2和80m^2,一些建筑的公寓分为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程序?你是说翻译,还是你在写别的东西?

你到底想让我们回答什么还不太清楚。您了解python中a的概念以及如何对其进行操作吗?使用键的名称将其存储在dict中是一个好方法,唯一的问题是区分不同的类型我认为这样做,并根据需要使用尽可能多的类型,但是它们我必须在列表中放入大量元素,以确保永远不会越界我喜欢使用字典的想法,但是我对它们有一些问题,特别是python对它们进行排序的标准,我把它们按特定的顺序排列,然后它们把键放在一个列表中显示,我以一种明显随机的方式得到它们,一些键的名称被遗漏了。用于输入dic。。。。list[i]=keyI喜欢使用字典的想法,但我在使用字典时遇到了一些问题,特别是在python对它们进行排序的条件方面,我将它们按特定的顺序放置,然后它们将键放入一个列表中显示,我以一种明显随机的方式获取它们,并且遗漏了一些键名。用于输入dic。。。。list[i]=key–我的意思是打印字典时,键的排序方式是否重要?字典只是用作di的存储设备 不同类型的公寓。如果缺少一个键,那么您可能应该检查代码,以确保每个单元类型都被正确地迭代。此外,如果您有重复名称的键,则它们的数据将被覆盖