Как обнаружить пустой объект? - PullRequest
0 голосов
/ 14 февраля 2019

Это общий вопрос о том, как определить, является ли объект пустым.Я объявляю переменную как объект:

description = discord.Embed()

Поместите ее через метод, который может или не может передавать аргументы объекту, например:

def my_function(x, y, z):
    ...some code goes here...
    if x == "some variable": 
        description = discord.Embed(title="X", desc="Y + z")
        return description
    else:
        description = discord.Embed()
        return description

Я хочу отобразить описаниетолько если он не пустой:

if description: client.send_message(message.channel, embed=description)

Однако приведенный выше код не работает, и мое сообщение отображается независимо от того, пустое оно или нет.Что мне делать?

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Определение Python для empty (оценивается как False) основано на общих объектах, а не на том, что у вас на уме.Если вы управляете классом (в данном случае это не так), вы можете добавить метод isEmpty для реализации своей собственной идеи.

Однако, поскольку вы используете устоявшийся класс, вынужно прочитать документацию , чтобы понять, как "задать" правильный вопрос для вашей идеи "пусто".Ваша переменная description определенно не пуста: она содержит информацию об инициализации в полях объекта и т. Д. По умолчанию определяется, является ли описание объекта None.

.ваше использование, что вы можете захотеть увидеть, есть ли какие-либо сообщения в очередиЕсли это так, я думаю, что вы можете сделать это с

if description.messages:
    client.send_message(message.channel, embed=description)

messages - декой, чей собственный метод isEmpty может делать то, что вы хотите.

0 голосов
/ 14 февраля 2019

Вы можете переопределить метод __bool__ для discord.Embed:

import discord
discord.Embed.__bool__ = lambda self: bool(self.title)

, чтобы объект Embed считался правдивым, только если он имеет непустой заголовок, и что ваш код:

if description: client.send_message(message.channel, embed=description)

будет работать как положено.

...