Почему мой класс обращается к другому классу, который не был импортирован? - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть несколько классов, хранящихся в модуле с именем car.py.Один класс использует другой.Вот код.

from car import ElectricCar
my_tesla = ElectricCar('tesla', 'model s', 2016)

Класс ElectricCar использует класс Battery, хранящийся в том же модуле, но Battery не импортируется.

class ElectricCar(Car):
"""Represent aspects of a car, specific to electric vehicles."""
    def __init__(self, make, model, year):
        """
        Initialize attributes of the parent class.
        Then initialize attributes specific to an electric car.
        """
        super().__init__(make, model, year)
        self.battery = Battery()

Вот родительский класс Car изтот же модуль car.py.

class Car():
"""A simple attempt to represent a car."""

def __init__(self, make, model, year):
    """Initialize attributes to describe the car."""
    self.make = make
    self.model = model
    self.year = year
    self.odometer_reading = 0

Вот класс Battery из того же модуля car.py.

class Battery():
"""A simple attempt to model a battery for an electric car."""

    def __init__(self, battery_size=70):
        """Initialize the battery's attributes."""
        self.battery_size = battery_size

    def describe_battery(self):
         """Print a statement describing the battery size."""
         print(f"This car has a {self.battery_size}-kwh battery!")

    def get_range(self):
    """Print a statement about the range this battery provides."""
        if self.battery_size == 70:
            range = 240
        elif self.battery_size == 85:
            range = 270

        message = f"This car can go approximately {range}"
        message += " mile on a full charge."
        print(message)

    def upgrade_battery(self):
        if self.battery_size == 70:
            self.battery_size = 85

И, наконец, код, который я использую для создания и использования объекта.

my_tesla = ElectricCar('tesla', 'model s', 2016)
my_tesla.battery.describe_battery()
my_tesla.battery.get_range()
my_tesla.battery.upgrade_battery()
my_tesla.battery.get_range()

Код работает просто отлично.Мой вопрос заключается в том, как при импорте ElectricCar он может получить доступ к классу «Батарея», если я не импортировал «Батарею» специально.В качестве дополнительного вопроса, который похож, как метод super () может получить доступ к родительскому классу, когда родительский класс также не был импортирован?Это как Python естественным образом работает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...