2016-07-11 13 views
1

Ich habe eine Methode foo(), die schließlich eine Student namens John zurückgibt.Python: Objekt Arg abrufen und überprüfen NPE in einer Zeile

#!/usr/bin/python3 
from random import randint 
class Student(object): 
    name = "" 

def foo(): 
    if randint(0,1) == 0: 
     student = Student() 
     student.name = 'john' 
    else: 
     student = None 
    return student 

Ich möchte den Namen des Schülers durch foo() (Vermeidung von NPE und die Vermeidung mehrere Anrufe zu foo()) zurückgegeben bekommen.

Meine aktuelle Lösung ist:

student = foo() 
print(student.name if student is not None else None) 

Ist es möglich, dies in einer Zeile zu tun, und ohne eine temporäre Variable zu schaffen?

Antwort

1

Sie können verwenden.

In Ihrem Beispiel wäre die Lösung getattr(foo(), 'name', None).

+0

Danke, was nun, wenn ich zum Beispiel die Arg durch ein Wörterbuch, wie übergeben möchte: 'dic [getattr (foo(), 'Name', None)] (Hier bekomme ich einen Schlüsselfehler: Keine) – roipoussiere

+1

Verwenden 'dict.get ('attr', Standard)'. Also 'dict.get (getattr (foo(), 'name', None), None)'. Aber Sie sollten wahrscheinlich nicht so hart Golf spielen - manchmal übertrifft die Lesbarkeit die Kompaktheit des Codes. –