简体   繁体   English

如何在Python中按属性从子类中找到对象

[英]How do I find objects from child class by attribute in Python

Let's say I have the following classes defined to construct a building made of rectangles which are made from points. 假设我定义了以下类,以构造由点组成的矩形构成的建筑物。 How do I query all the rectangles by attribute from inside a Building class? 如何从Building类内部按属性查询所有矩形? I think I'm supposed to use a super method here but after reading online, cannot figure it out. 我想我应该在这里使用超级方法,但是在网上阅读后,无法弄清楚。 Thank you. 谢谢。


class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

class Rectangle(Point):
    def __init__(self, north, east, south, west):
        self.north = north
        self.east = east
        self.south = south
        self.west = west

class Building(Rectangle):
    def __init__(self, rectangles):
        self.rectangles = rectangles

    #Search through all the points to find one with matching attributes
    def find_point_by_elevation(self, y):
        for rectangle in self.rectangles:
            if rectangle.south.y = y:
                return rectangle.south

#Testing the Code
n, e, s, w = Point(1,2), Point(2,1), Point(0,1), Point(0,1)
rectangle1 = Rectagnle(n,e,s,w)

n, e, s, w = Point(10,20), Point(20,10), Point(0,10), Point(0,10)
rectangle2 = Rectagnle(n,e,s,w)

my_building = [rectangle1, rectangle2]

my_building.find_point_by_elevation(1)

Your inheritance make no sense. 您的继承毫无意义。 Buildings are not rectangles, and rectangles are not points. 建筑物不是矩形,矩形也不是点。 This is a job for composition, not inheritance, and you're correctly doing that by passing in the points etc - just leave off the inheritance. 这是用于合成的工作,而不是继承,您通过传递要点等来正确地做到这一点-只需放弃继承即可。

Apart from that, I'm not sure what your question is. 除此之外,我不确定您的问题是什么。 There's no way to query attributes other than iterating through, which you're already doing, unless you store then in some kind of data structure that indexes the attribute you want to query. 除了已经遍历之外,没有其他方法可以查询属性,除非您将其存储在某种数据结构中,该数据结构为要查询的属性编制了索引。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM