2013-06-24 5 views
5

Я нашел аналогичное определение класса, как показано ниже, в базе кода Python. Похоже, в официальных документах подобных примеров нет. Очень сложно найти подобную вещь Google и искать в форуме. Может кто-нибудь помочь мне понять принцип в Python за этим?Определение класса Python на основе условия

class a: pass 
class b: pass 
condition = True 
class c(a if condition == True else b): pass 
+0

В синтаксисе более традиционного тернарного оператора утверждение внутри скобки эквивалентно 'condition? a: b'. – arshajii

+0

Больше pythonic для использования 'if condition else b' (' == True' лишний)! –

ответ

5

a if condition == True else b - тернарное выражение.

Это означает, что a в качестве базового класса, если condition равно True еще использовать b.

В condition == True является True поэтому он использует a:

>>> class c(a if condition == True else b): pass 
>>> c.__bases__ 
(<class __main__.a at 0xb615444c>,) 

Примеры:

>>> print 'foo' if 0>1 else 'bar' 
bar 
>>> print 'foo' if 1>0 else 'bar' 
foo 

Из docs:

Выражение x if C else y первым оценивает состояние, C (не x); если C истинно, x оценивается и возвращается его значение; в противном случае, y оценивается и возвращается его значение.

+0

Вау, как я этого не нашел. Спасибо, Ашвини! – shinji