首先,我是个十足的新手。谢谢你的耐心。
我正在设计一个软件来计算不同房屋的绝缘材料和数量。
我有一个class House(),它包含像roof_area和wall_area这样的属性。
我有一个class Insulator(),它包含诸如厚度和面积(包装材料覆盖的区域)等属性。
现在我想知道我应该买多少包绝缘子才能覆盖整个屋顶地区。
因此,行动将是:
House.roof_area / Insulator.area = insulator_packages_needed_for_roof问题是我不能做那个手术
AttributeError: type object 'House' has no attribute 'roof_area'. 当然,我可以将它作为一个实例作用域,但我还不想指定一个实例,因为这个操作应该针对将来构建的类的任何实例执行。我应该使用继承吗?我的感觉是,考虑到绝缘子和房子是完全不同的东西,他们不应该混为一谈,但我只是一个初学者。
发布于 2016-08-12 18:34:32
在不使用House或Insulator类实例的情况下,试图计算需要覆盖房屋屋顶的绝缘包的数量是没有任何意义的。只有当每个实例都有一个实例时,这才有意义。
但是,您可以在创建实例之前编写代码来进行计算。只需将其放入一个将实例作为参数的函数:
def roof_insulation_packages(house, insulator): # args are instances of House and Insulator
return house.roof_area / insulator.area # do the calculation and return it函数作为其中一个类的方法可能更有意义。我甚至建议Insulator实例可以成为House的实例属性。看起来是这样的:
class House():
def __init__(self, roof_area, roof_insulator, wall_area, wall_insulator):
self.roof_area = roof_area
self.roof_insulator = roof_insulator
self.wall_area = wall_area
self.wall_insulator = wall_insulator
def calculate_roof_insulation_packages(self):
return self.roof_area / self.roof_insulator.area
def calculate_wall_insulation_packages(self, insulator):
return self.wall_area / self.wall_insulator.area您可以使用这样的方法创建house实例(我正在为Insulator类编参数,所以不要过多地关注这个部分):
good_roof_insulation = Insulator(4, 5) # nonsense args
cheap_wall_insulation = Insulator(5, 12)
my_house = House(100, good_roof_insulation, 87, cheap_wall_insulation)发布于 2016-08-12 17:13:07
如果您想使用属性而不创建实例,则应该使用类属性。
class House(object):
roof_area = 10 # Or whatever you see fit.
roof_surface = 20
class Insulator(object):
thickness = 10 # Or whatever you see fit.
surface = 20通过这种方式,您可以通过输入'House.roof_area‘来访问属性。
不过,我不明白为什么您不能创建一个实例。它将防止类属性中的重新编码,并且在您的情况下会容易得多。
另外,您的操作不是有效的语法,但可能只是显示了伪代码。适当的语法是:
insulator_packages_needed_for_roof = House.roof_area / Insulator.areahttps://stackoverflow.com/questions/38923102
复制相似问题