печать переменной в python - PullRequest
1 голос
/ 22 ноября 2011

У меня есть этот код Python, который устанавливает A или B в классе. Я хочу напечатать то, что получает этот класс:

if options.A:
   print "setting A"
   class TmpClass(A): pass
else:
   print "nothing set in the command line => setting to B"
   class TmpClass(B): pass

print "selected=",TmpClass

Я хочу видеть либо A, либо B в выводе, но вижу:

selected= TmpClass

Ответы [ 4 ]

3 голосов
/ 22 ноября 2011

Что делает ваш код, переведенный на английский:

if option.A has a value that evaluates to True:
    define an empty class called "TmpClass" that inherits from the object called "A"
otherwise:
    define an empty class called "TmpClass" that inherits from the object called "B"

Теперь, если то, что на самом деле делает код, действительно то, что вы и предполагали, моя догадка - это то, что вы хотели узнать, является ли ваш класс на основе A или B ... Если я прав, то строка, которую вы хотите получить в конце:

print('TmpClass inherits from : %s' % TmpClass.__bases__)

HTH!

1 голос
/ 22 ноября 2011

Вы можете посмотреть на использование isinstance ().Например:

class MyBaseClass():
    def __init__(self):
        self.cType = 'Base'

    def whichClass(self):
        print 'Class type = {0}'.format(self.cType)

        if isinstance(self,DerivedClassA):
            print 'Derived Class A'
        elif isinstance(self,DerivedClassB):
            print 'Derived Class B'
        elif isinstance(self,MyBaseClass):
            print 'Not A or B'
        else:
            print 'Unknown Class'

class DerivedClassA(MyBaseClass):
    def __init__(self):
        self.cType = 'Class A'

class DerivedClassB(MyBaseClass):
    def __init__(self):
        self.cType = 'Class B'


Then Run:

base = MyBaseClass()
a = DerivedClassA()
b = DerivedClassB()
a.whichClass()
>> Class type = Class A
>> Derived Class A
b.whichClass()
>> Class type = Class B
>> Derived Class B
base.whichClass()
>> Class type = Base
>> Not A or B
1 голос
/ 22 ноября 2011

Вы можете назначать классы переменной, не создавая их экземпляры:

if options.A:
   print "setting A"
   TmpClass = A
else:
   print "nothing set in the command line => setting to B"
   TmpClass = B

print "selected=",TmpClass
0 голосов
/ 22 ноября 2011

A и B являются формальными аргументами, передаваемыми здесь классу, а не фактическими значениями A и B.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...