仅在Python中不为null时打印-单行方法?

仅在Python中不为null时打印-单行方法?,python,one-liner,Python,One Liner,我有一个类对象,Task,它有四个属性,t,date,priority和checked。只有t必须包含一个值,其他三个属性是可选的。我编写了一个print方法,如果字符串不为null,它将打印字符串: class Task: def __init__(self, _t, _date=None, _priority=None, _checked=False): self.t = _t try: self.date = parser.p

我有一个类对象,
Task
,它有四个属性,
t
date
priority
checked
。只有
t
必须包含一个值,其他三个属性是可选的。我编写了一个print方法,如果字符串不为null,它将打印字符串:

class Task:
    def __init__(self, _t, _date=None, _priority=None, _checked=False):
        self.t = _t
        try:
            self.date = parser.parse(_date, dayfirst=True) if _date else None
        except:
            self.date = None
        self.priority = _priority
        self.checked = _checked

    def print(self):
        print(self.t, end="")
        if self.date:
            print(self.date, end="")
        if self.priority:
            print(self.priority, end="")
。。。但我想知道有没有办法把它压缩成一行。在VB.NET中,可以执行以下操作:

Console.Writeline(me.t, If(me.date Is Not Nothing, me.date, ""), If(me.priority Is Not Nothing, me.priority, ""))
我尝试在Python中这样做,如下所示,但工作方式不同:

print(self.t, if(self.date, self.date), if(self.priority, self.priority))

是否有单行解决方案,或任何更简洁的方法?

您可以将
过滤器
None
bool
一起使用,以避免打印
None

def print(self):    
    print(*filter(None, [self.t, self.date, self.priority]))


您可以连接它们并打印,这将处理空值:

def print(self):
    string= self.t + " " + self.date + " " + self.priority
    print(string,end = "")

您可以创建一个列表,然后检查列表是否不是
None

类任务:
定义初始化(self,t,date=None,priority=None,checked=False):
self.t=\u t
尝试:
self.date=parser.parse(_date,dayfirst=True)如果_date否则无
除:
self.date=无
self.priority=\u priority
self.checked=\u checked
self.print\u list=[\u t,\u日期,\u优先级]
def打印(自):
[在self.print_列表中为i打印(i,end=''),如果i不是None]
t=任务(t=4,日期=25)
t、 打印()
不是None的每个变量的列表理解:

def打印(自):
[在self.print_列表中为i打印(i,end=''),如果i不是None]
也相当于:

def print(self):print(*[i代表self.print_列表中的i,如果i不是None],end=”“)
甚至可能用一个
dict

类任务:
定义初始化(self,t,date=None,priority=None,checked=False):
尝试:
temp\u date=parser.parse(\u date,dayfirst=True)if\u date else None
除外:#我建议将除外捕获作为一个更具体的案例
临时日期=无
self.entities={t':_t,'date':temp_date,'priority':_priority}
def print(self):打印([v代表uuv,如果v不是None,则在self.entities.items()中为v),end=“”)
t=任务(t=4,日期=25)
t、 打印()

但是,这不会打印空白吗?例如,如果我将
t
设置为
Task 1
date
设置为nothing,并且
priority
设置为1,它不会打印这样的内容:
Task 1 1
而不是
Task 1 1
是的,没有空格,输出看起来有点笨拙
def print(self):
    string= self.t + " " + self.date + " " + self.priority
    print(string,end = "")