Python 3.x 如何从基于类的系统中获取区域列表
所以我在介绍python类,我们刚刚开始用python编写Bases类代码。我想从列表中的植物中得到一个面积列表,这样我就可以得到这些面积,得到一个总数,然后从床上的面积中减去它们。我很难弄清楚如何列出我床上的植物面积,目前只剩下蓝莓了。非常感谢您的任何想法Python 3.x 如何从基于类的系统中获取区域列表,python-3.x,Python 3.x,所以我在介绍python类,我们刚刚开始用python编写Bases类代码。我想从列表中的植物中得到一个面积列表,这样我就可以得到这些面积,得到一个总数,然后从床上的面积中减去它们。我很难弄清楚如何列出我床上的植物面积,目前只剩下蓝莓了。非常感谢您的任何想法 class crop: name = "Crop" sizeW = 0 sizeL = 0 areaOfCrop=sizeL * sizeW def print(self):
class crop:
name = "Crop"
sizeW = 0
sizeL = 0
areaOfCrop=sizeL * sizeW
def print(self):
print("This is a ",self.name," and is ",self.sizeW,"X",self.sizeL, "and has an area of ",self.areaOfCrop)
def willItFit(self, W, L):
return self.sizeW <= W and self.sizeL <= L
def sameAs(self, crop):
return self.name == crop.name
class plant(crop):
name = "Plant"
sizeW = 1
sizeL = 1
areaOfCrop = sizeL * sizeW
class parsley(plant):
name = "Parsley"
class shrub(crop):
name = "Shrub"
sizeW = 2
sizeL = 2
areaOfCrop = sizeL * sizeW
class blueberries(shrub):
name = "Blueberries"
class tree(crop):
name = "tree"
sizeW = 3
sizeL = 3
areaOfCrop = sizeL * sizeW
class dwarfPeach(tree):
name = "Dwarf Peach"
class bed:
sizeL = int(input("What is the length? "))
sizeW = int(input("What is the width? "))
crops = [blueberries()] # The list of crops in this bed
areaOfAllCrops = [crops[areaOfCrop()]] #this is where my problem is
def print(self):
print("The bed is ", self.sizeL," x ", self.sizeW)
for c in self.crops:
c.print()
def maxSizeAvailable(self):
''' area of bed-total area of all crops in be '''
return (self.sizeW, self.sizeL)
def add(self, newCrop):
dimension = self.maxSizeAvailable()
if newCrop.willItFit(dimension[0], dimension[1]):
self.crops.append(newCrop)
def remove(self, existingCrop):
for c in self.crops:
if c.sameAs(existingCrop):
self.crops.remove(c)
def checkFit(self, crop):
dimension = self.maxSizeAvailable()
return crop.willItFit(dimension[0], dimension[1])
b = bed()
b.print()
类裁剪:
name=“作物”
sizeW=0
大小=0
作物面积=大小*大小
def打印(自):
打印(“这是一个”,self.name,“是”,self.sizeW,“X”,self.sizeL,“并且有一个”self.areaOfCrop“区域)
def willItFit(自身、W、L):
返回self.sizeW您可以将crops
列表中crops
实例的面积与sum(x.areaofcropforx in crops)
相加。这是传递给内置函数sum
的生成器表达式
但我认为你有一个更大的概念问题,这会在以后给你带来问题,即使你解决了眼前的问题。问题是您在代码中只使用类属性,而不是实例属性。虽然在某些情况下类属性是有用的,但绝大多数情况下您都希望处理实例属性
要创建实例属性,您需要在方法中进行赋值,并将其赋值给self.attr
,而不仅仅是attr
。通常初始化实例属性的地方是\uuuu init\uuu
方法,Python在创建新实例后将为您调用该方法
举个例子,您的crop
类可能应该以以下内容开头:
class crop:
def __init__(self):
self.name = "Crop"
self.sizeW = 0
self.sizeL = 0
self.areaOfCrop = sizeL * size
# ...
其中一些值可以作为参数传递,而不是总是设置为相同的常量。这就引出了一个设计问题:是否需要所有不同的工厂都是单独类的实例,或者它们都是一个类的不同实例,实例属性中包含不同的数据?(如果您还不知道答案,请不要太担心。要想擅长设计类,需要一些面向对象的经验。)非常感谢您提供此技巧!我稍后再试试看是否有效。我不确定这是否有用。教授给了我们这段代码的大部分,并告诉我们自己想出这最后一部分。你所建议的是bettet方法,但他让我们这样做是为了学习基本知识。