Как получить собственное имя экземпляра ссылки? - PullRequest
0 голосов
/ 26 марта 2020

Возможно ли получить имя ссылки экземпляра, который вызывает функцию, в функции? В функции, вызываемой ссылкой экземпляра, должно быть распознано имя ссылки, вызвавшей функцию. Это возможно? Спасибо.

redCar = Car()
blackCar = Car()

redCar.carControl()
blackCar.carControl()


def carControl():

    if trafficJam == True:
        redCar.changeSpeed(500)
        redCar.warningLights(On)

        #is something like the following possible?
        "GetNameOfReferenceWhichCalledTheFunction".changeSpeed(500)
        "GetNameOfReferenceWhichCalledTheFunction".warningLight(On)

Ответы [ 3 ]

1 голос
/ 26 марта 2020

Экземпляры не вызывают функции. Вы можете назвать метод экземпляром, что вы и делаете, например, redCar.carControl(). Поскольку carControl является методом, его необходимо определить внутри класса.

Но да, в этом методе вы можете получить доступ к redCar - потому что ему передается в качестве аргумента и вам нужен параметр для его получения. По соглашению мы используем имя self для этого параметра.

Пожалуйста, внимательно изучите пример:

traffic_jam = True

class Car:
    def control(self):
        if traffic_jam:
            # The display message will show some debug information that
            # identifies the object. It doesn't have the name `red_car`
            # built into it - it cannot, because you can use multiple names
            # for the same thing - but it is identified uniquely.
            print(self, "slowing down and putting on warning lights")

red_car = Car()
# When this call is made, the `red_car` will be passed to the method,
# which knows it as `self`.
red_car.control()
1 голос
/ 26 марта 2020

При использовании класса экземпляр, который вызвал метод, доступен по первому параметру, заполненному автоматически, обычно называемому self

class Car:
    def carControl(self):
        if trafficJam == True:
            self.changeSpeed(500)
            self.warningLights(On)

    def changeSpeed(self, value):
        self.speed = value


redCar = Car()
redCar.carControl()
redCar.changeSpeed(250)
0 голосов
/ 26 марта 2020
class Car:
    def __init__(self, name):
        self.name = name

    def change_speed(self, speed):
        print(self.name, ": speed =", speed)

    def car_control(self, traffic_jam):
        if traffic_jam:
            self.change_speed(0)
        else:
            self.change_speed(50)


red_car = Car("red")
black_car = Car("black")

red_car.car_control(True)
black_car.car_control(False)

Выход:

red : speed = 0
black : speed = 50
...