Не уверен, что instance — правильное слово, но надеюсь, вы поймете, что я пытаюсь сделать. Вот пример того, что я хотел бы, чтобы код делал:
class name:
def __init__(self):
self.a = "hello "
def say_hello(self):
print(self.a + str(self))
Jorge = name()
Bruno = name()
Jorge.say_hello()
Bruno.say_hello()
Вывод будет такой
hello <__main__.name object at 0x000002C80D4CEEB0>
hello <__main__.name object at 0x000002C80C9FC250>
Но я хочу, чтобы это было так
hello Jorge
hello Bruno
Я думал, что «я» соответствует «Хорхе» в этом отношении, поскольку я могу использовать «print (Jorge.a)» для печати «hello» вне функции класса и «print (self.a)» внутри функции класса. Есть ли способ сделать это?
Спасибо за ваше время, очень ценится.
class name:
def __init__(self, name):
self.name = name
def say_hello(self):
print("hello " + self.__repr__())
def __repr__(self):
return self.name
def __str__(self):
return "this is my name: {}".format(self.name)
Jorge = name("Jorge")
Bruno = name("Bruno")
Jorge.say_hello()
Bruno.say_hello()
print(Jorge)
Обычно вы не используете имя экземпляра класса внутри класса, соглашение получает имя как переменную класса.
Есть несколько способов добиться этой функциональности, но в некоторых случаях экземпляры не имеют уникальных имен, например, у вас может быть список безымянных экземпляров класса, поэтому даже если есть обходной путь, он будет хрупким. Если вы действительно хотите это сделать, используйте это в функции return [k for k,v in globals().items() if v is self]
Он выполняет свою работу, но это не то, что я имел в виду... Если я напишу
Jorge = name("Bruno"); Jorge.say_hello()
, он напечатает «привет, Бруно». Я все еще хочу, чтобы он печатал "привет, Хорхе"