首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“‘str”对象没有属性“passengerName”-使用内置的Python函数

“‘str”对象没有属性“passengerName”-使用内置的Python函数
EN

Stack Overflow用户
提问于 2020-11-24 21:12:27
回答 3查看 75关注 0票数 0
代码语言:javascript
复制
class Flight():  # Flight Class (MAIN)
    def __init__(self, airlineName, departureAirport, arrivalAirport):  # Constructor Method
        self.airlineName: str  # Declaring attributes & Setting Types
        self.departureAirport: str  # Declaring attributes & Setting Types
        self.arrivalAirport: str  # Declaring attributes & Setting Types

    def setAirlineName(self, airlineName):  # Mutator Method
        self.airlineName = airlineName

    def getAirlineName(self):  # Accessor Method
        if len(self.airlineName) > 0:  # Error Checking
            return self.airlineName
        else:
            return "No airline name set"

    def setDepartureAirport(self, departureAirport):  # Mutator Method
        self.departureAirport = departureAirport

    def getDepartureAirport(self):  # Accessor Method
        if len(self.departureAirport) > 0:  # Error Checking
            return self.departureAirport
        else:
            return "No departure airport set"

    def setArrivalAirport(self, arrivalAirport):  # Mutator Method
        self.arrivalAirport = arrivalAirport

    def getArrivalAirport(self):  # Accessor Method
        if len(self.arrivalAirport) > 0:  # Error Checking
            return self.arrivalAirport
        else:
            return "No arrival airport set"

    def __eq__(self, otherFlight):
        return (self.airlineName == otherFlight.airlineName)

    def __str__(self):  # Overiding Method
        return "\n==================================================\n++++++++++++++++++ Flight Info ++++++++++++++++++\n==================================================\nAirline Name: " + self.airlineName + "\Departure Airport: " + self.departureAirport + "\nArrival Airport: " + self.arrivalAirport


class PassengerFlight(Flight):  # PassengerFlight Class (EXTENDS MAIN)
    def __init__(self, airlineName, departureAirport, arrivalAirport, passengerList, flightType, baggageWeight):  # Constructor Method
        super().__init__(airlineName, departureAirport, arrivalAirport)
        self.passengerList: list  # Declaring attributes & Setting Types
        self.flightType: str  # Declaring attributes & Setting Types
        self.baggageWeight: float  # Declaring attributes & Setting Types

    def setPassengerName(self, passengerList):  # Mutator Method
        self.passengerList = passengerList

    def getPassengerName(self):  # Accessor Method
        if len(self.passengerList) > 0:  # Error Checking
            return self.passengerList
        else:
            return "Passenger List Not Set"

    def setFlightType(self, flightType):  # Mutator Method
        self.flightType = flightType

    def getFlightType(self):  # Accessor Method
        if len(self.flightType) > 0:  # Error Checking
            return self.flightType
        else:
            return "No Flight Type Set"

    def setBaggageWeight(self):  # Mutator Method
        baggageWeight = 0
        for i in range(len(self.passengerList)):  # Iterates through passenger list
            baggageWeight += 50.00  # For each passenger in the list add 50KG to baggage variable
        self.baggageWeight = baggageWeight  # Set our attribute equal to the variable

    def getBaggageWeight(self):  # Accessor Method
        if self.baggageWeight == 0:
            return "No Baggage Weight Set"
        else:
            return self.baggageWeight

    def __str__(self):  # Overiding Method
        return super().__str__() + "\nPassenger Names: " + str(self.getPassengerName()) + "\nFlight Type: " + self.flightType + "\nBaggage Weight: " + str(self.baggageWeight) + '(KG) \n==================================================\n'


class CargoFlight(Flight):  # CargoFlight Class (EXTENDS MAIN)
    def __init__(self, airlineName, departureAirport, arrivalAirport, cargoType, cargoWeight, liveAnimals):  # Constructor Method
        super().__init__(airlineName, departureAirport, arrivalAirport)
        self.cargoType: str  # Declaring attributes & Setting Types
        self.cargoWeight: float  # Declaring attributes & Setting Types
        self.amountPallets: int  # Declaring attributes & Setting Types
        self.liveAnimals: bool  # Declaring attributes & Setting Types

    def setCargoType(self, cargoType):  # Mutator Method
        self.cargoType = cargoType

    def getCargoType(self):  # Accessor Method
        if len(self.cargoType) > 0:  # Error Checking
            return self.cargoType
        else:
            return "No Cargo Type Set"

    def setAmountPallets(self, amountPallets):  # Mutator Method
        self.amountPallets = amountPallets

    def getAmountPallets(self):  # Accessor Method
        if self.amountPallets != 0:  # Error Checking
            return self.amountPallets
        else:
            return "Amount of pallets not set"

    def setCargoWeight(self):  # Mutator Method
        avgCargoWeight = 114  # Googled average weight for airline pallet
        # Multiply the average cargo weight by the amount of pallets and set it to our attribute
        self.cargoWeight = avgCargoWeight * self.amountPallets

    def getCargoWeight(self):  # Accessor Method
        if self.cargoWeight == 0:  # Error Checking
            return "No Cargo Weight Set"
        else:
            return self.cargoWeight

    def setLiveAnimals(self, liveAnimals):  # Mutator Method
        if liveAnimals == True:  # If it's set to true
            self.liveAnimals = True  # set the
        else:
            self.liveAnimals = False

    def getLiveAnimals(self):
        if self.liveAnimals == True:  # Error Checking
            return "There are live animals on-board"
        else:
            return "There are no live animals on-board"

    def __str__(self):  # Overiding Method
        return super().__str__() + "\nCargo Type: " + self.getCargoType() + "\nCargo Pallets: " + str(self.getAmountPallets()) + "\nCargo Weight: " + str(self.getCargoWeight()) + "\nIs there live animals?: " + str(self.getLiveAnimals()) + "\n==================================================\n"


# Passengers Class (Implementation of 1:0..M aggregation relationship)
class Passengers:
    def __init__(self, passengerName, passengerWeight):  # Constructor Method
        # Implementing the 1:0..M aggregation relationship between Passengers and PassengerFlight
        self.passengerName: list  # Declaring attributes & Setting Types
        self.passengerWeight: int  # Declaring attributes & Setting Types

    def setPassengerName(self, passengerName):  # Mutator Method
        self.passengerName = passengerName

    def getPassengerName(self):  # Accessor Method
        if len(self.passengerName) > 0:
            return self.passengerName
        else:
            return "Passenger Name List Not Set"

    def setPassengerWeight(self):
        passengerWeight = 0
        # For i in lenth of self.passengerName variable
        for i in range(len(self.passengerName)):
            # Add 80KG (Avg Weight) to the passengerWeight variable
            passengerWeight += 80.00
        # Set our attribute equal to the variable
        self.passengerWeight = passengerWeight

    def getPassengerWeight(self):  # Acessor Method
        if self.passengerWeight != 0:
            return self.passengerWeight
        else:
            return "No passenger Weight Set"

    def getPassengerCount(self):  # Accessor Method
        return len(self.passengerName)

    def __str__(self):  # Overiding Method
        return "==================================================\n+++++++++++++++ Passenger Info +++++++++++++++\n==================================================\nPassenger Count: " + str(self.getPassengerCount()) + "\nPassenger Weight: " + str(self.getPassengerWeight()) + "(KG)\n==================================================\n"


class AirplaneType:  # AirplaneType Class (Aggregation (1:1) Relationship)
    def __init__(self, airplaneType, cargoWeight, Flight):  # Constructor Method
        self.cargoWeight: int  # Declaring attributes & Setting Types
        self.totalWeight: int  # Declaring attributes & Setting Types
        self.Flight = Flight  # Declaring attributes & Setting Types

    def setCargoWeight(self, cargoWeight):  # Mutator method
        self.cargoWeight = cargoWeight

    def getCargoWeight(self):  # Accessor Method
        if self.cargoWeight != 0:
            return self.cargoWeight
        else:
            return "No cargo weight set"

    def setTotalWeight(self, passengerWeight, passengerBaggage):  # Mutator method
        totalWeight = 0  # Initializing variable to 0
        if passengerWeight != 0 or self.cargoWeight != 0:  # Checks values are not 0
            # Sets totalWeight vaiable = to passengerWeight, passengerBaggage & cargoWeight
            totalWeight += passengerWeight + passengerBaggage + self.cargoWeight
        else:
            print("Values not set correctly, please try again!")  # Error checking
        self.totalWeight = totalWeight

    def getTotalWeight(self):  # Accessor Method
        if self.totalWeight != 0:
            return self.totalWeight
        else:
            return "Total weight not set"

    # If, elif, else statement that gets the total weight and declares what plane they should use based on info given
    def getAirplaneType(self):  # Accessor Method
        if self.totalWeight >= 0 and self.totalWeight < 500:
            return "Airbus A320/Boeing 737"
        elif self.totalWeight >= 500 and self.totalWeight < 1000:
            return "Airbus A321/Boeing 757"
        elif self.totalWeight >= 1000 and self.totalWeight < 1500:
            return "Airbus A330/Boeing 787"
        elif self.totalWeight >= 1500 and self.totalWeight < 2000:
            return "Airbus A350/Boeing 777"
        elif self.totalWeight >= 2000:
            return "Airbus A380/Boeing 747"
        else:
            print('Error: No suitable aircraft found')

    def __str__(self):  # Overiding Method
        return "==================================================\n++++++ Aircraft Information (Pilot & Staff) ++++++\n==================================================\nAirplane Type Recommended: " + self.getAirplaneType() + "\nAirplane Weight: " + str(self.totalWeight) + "(KG)\n==================================================\n"


##########################################################
#           Calling PassengerFlight Class           #
##########################################################
# Initialize Class & Set to Variable
passenger = PassengerFlight(None, None, None, None, None, None)
passenger.setAirlineName('Aer Lingus')  # Set mutators & values
passenger.setArrivalAirport('Chicago O\'Hare Intl')  # Set mutators & values
passenger.setDepartureAirport('Dublin')  # Set mutators & values
passenger.setFlightType('Long Haul')  # Set mutators & values
passenger.setPassengerName(['Passenger 1', 'Passenger 2',
                            'Passenger 3', 'Passenger 4', 'Passenger 5', 'Passenger 6'])  # Set mutators & values
passenger.setBaggageWeight()  # Set mutators & values
print(passenger)  # uses the overridden _str_ method to print detail of the class
##########################################################
#           Calling Passengers Class           #
##########################################################
# Initialize Class & Set Attributes to None
passengerInfo = Passengers(None, None)
passengerInfo.setPassengerName(
    passenger.passengerList)  # Set mutators & values
passengerInfo.setPassengerWeight()
print(passengerInfo)  # uses the overridden _str_ method to print detail of the
##########################################################
#           Calling AirplaneType Class           #
##########################################################
# Initialize Class & Set Attributes to None
passengerFlight = AirplaneType(None, None, Flight)
passengerFlight.setCargoWeight(0)  # Set mutators & values
passengerFlight.setTotalWeight(
    passengerInfo.passengerWeight, passenger.baggageWeight)  # Set mutators & values
# uses the overridden _str_ method to print detail of the class
print(passengerFlight)
##########################################################
##########################################################
#           Calling CargoFlight Class           #
##########################################################
# Initialize Class & Set Attributes to None
cargo = CargoFlight(None, None, None, None, None, None)
cargo.setAirlineName('DHL')  # Set mutators & values
cargo.setArrivalAirport('JFK Intl')  # Set mutators & values
cargo.setDepartureAirport('Dublin Intl')  # Set mutators & values
cargo.setCargoType('General')  # Set mutators & values
cargo.setLiveAnimals(True)  # Set mutators & values
cargo.setAmountPallets(10)  # Set mutators & values
cargo.setCargoWeight()  # Set mutators & values
print(cargo)  # uses the overridden _str_ method to print detail of the class
##########################################################
#           Calling AirplaneType Class           #
##########################################################
# Initialize Class & Set Attributes to None
cargoFl = AirplaneType(None, None, Flight)
cargoFl.setCargoWeight(cargo.cargoWeight)  # Set mutators & values
cargoFl.setTotalWeight(0, 0)  # Set mutators & values
print(cargoFl)  # uses the overridden _str_ method to print detail of the class
##########################################################
print(cargo == passenger)
##########################################################
# In-Built Functions

def getPassengers(p):
    return p.passengerName


print(min(passengerInfo.passengerName, key=getPassengers))

你好啊,

我在大学的python代码中遇到了一个错误。我必须添加使用python内置函数的排序功能。讲座希望我们使用辅助函数,就像上面最后几行一样。当我尝试运行这个函数时,我在def getPassengers(p)函数上得到一个错误:

Exception has occurred: AttributeError 'str' object has no attribute 'passengerName'

我可以看到它选择了变量'Passenger 1‘,并显示为一个本地变量,这是正确的,因为运行min()将选择第一个passenger,因为它们都是相同的长度。

有人有什么建议来解决这个问题吗?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-11-24 21:35:38

passengerInfo.passengerName包含以下['Passenger 1', 'Passenger 2', 'Passenger 3', 'Passenger 4', 'Passenger 5', 'Passenger 6'],它是一个字符串列表。在这种情况下,作为键传递给函数min的是该列表的元素,而不是passengerInfo对象。在这种情况下,可以在没有任何个性化键的情况下对列表元素应用min函数。min函数将应用于列表的字符串值。

下面返回正确的min

代码语言:javascript
复制
>>> print(min(passengerInfo.passengerName))
'Passenger 1'

现在,要通过检查字符串的长度来获得最小值,可以执行以下操作

代码语言:javascript
复制
>>> print(min(passengerInfo.passengerName, key=lambda x: len(x)))
票数 0
EN

Stack Overflow用户

发布于 2020-11-24 21:26:19

您的实现的问题是,您将一个参数传递给str类型的getPassengers,然后尝试访问该str上的passengerName属性,这将不起作用。如果您希望按姓名长度对这些乘客进行排序,则甚至不需要为此定义自定义函数。您可以只将len作为key参数传递:

代码语言:javascript
复制
>>> len_sorted = sorted(passengerInfo.passengerName, key=len)
['Passenger 1', 'Passenger 2', 'Passenger 3', 'Passenger 4', 'Passenger 5', 'Passenger 6']

然后,您只需编写以下代码即可访问这些文件上的minmax等:

代码语言:javascript
复制
>>> min(len_sorted)
'Passenger 1'

>>> max(len_sorted)
'Passenger 6'
票数 1
EN

Stack Overflow用户

发布于 2020-11-24 21:19:33

传递给min的'key‘参数是要在passengerInfo.passengerName上执行的函数。

因此,您在passengerName (类型为str)上调用'getPassengers‘函数,这会导致错误

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64987261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档