Python: как «создать» экземпляр класса и установить его свойства при передаче аргумента? - PullRequest
0 голосов
/ 11 февраля 2011

Код Python:

class A:
    '''omitted'''
    pass

def foo(A): pass


a = A()
a.xx = 1
a.yy = 2
foo(a)

возможно ли переписать приведенный выше код, как этот?

foo(a = A(), a.xx =1, a.bb = 2)

Спасибо!

===================

спасибо за решение ниже:

foo(A())

, но если A имеет foo1 (), foo2 ()

a = A()
a.foo1()
a.foo2()
foo(a)

как можно кодировать приведенный выше код выглядит так:

foo(a = A(); a.foo1(); a.foo2())

?

Еще раз спасибо

Ответы [ 4 ]

4 голосов
/ 11 февраля 2011

Вы имеете в виду конструктор?Вам просто нужно предоставить метод __init__:

class A(object):
    def __init__(self, xx, yy):
        self.xx = xx
        self.yy = yy

foo(A(1, 2))
3 голосов
/ 11 февраля 2011

Если вы полностью настроены против вызова foo1 и foo2 в или перед функцией foo, вызовите ее в __init__, который @Santa создал для вас как.

class A(object):
    def __init__(self, xx=None, yy=None):
        self.xx = xx
        self.yy = yy
        self.foo1()
        self.foo2()

    def foo1(self):
        """
        Do something here
        """
    def foo2(self):
        """
        Do something else here
        """
foo(A(1,2))
foo(A())

Теперь выпередача функции foo объекта A с установленными свойствами и вызываемыми методами.

0 голосов
/ 11 февраля 2011

Краткий ответ: вы не можете!

Длинный ответ:

foo (a = A (), a.xx = 1, a.bb = 2)

Этот синтаксис предполагает, что foo является вызываемым, с запятыми, разделяющими позиционные или ключевые аргументы. Поскольку вы ставите знак равенства, это должны быть ключевые слова args, но a.xx не является допустимым именем ключевого слова

foo (a = A (); a.foo1 (); a.foo2 ())

; не является допустимым разделителем аргументов

0 голосов
/ 11 февраля 2011

Извините, но если вы пишете Python, вам придется использовать синтаксис Python.Назначение в Python не является выражением, поэтому, если вы хотите назначить что-то, вы пишете это как отдельное утверждение.

a = A()
a.foo1()
a.foo2()
foo(a)

Правильно, ясно и кратко.

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