Сбой соединения Oracle ODBC

Чтобы опираться на то, что сказали все остальные, да, вам нужно вызвать метод родителя __init__.

Обычно лучше использовать супер. Однако в некоторых случаях (особенно когда вы наследуете от нескольких классов) это может быть большая проблема. Я не буду вдаваться в подробности, нет недостатка в различных статьях, которые обсуждают это . (Кроме того, есть некоторые странности с некоторыми другими «специальными» функциями. Например, вы можете делать super(SomeCls, self).__getitem__(5), но super(SomeCls, self)[5] не будет работать.)

В качестве упрощенного примера того, почему хорошая идея использовать его, вы можете сделать Dog и Cat наследовать от Mammal (который наследуется от Animal) и не менять места в вашем коде, кроме класса Dog и Cat inherit from.

Что касается того, почему ваш экземпляр tom не имеет tom.nlegs, это потому, что вы не вызвали метод Animal __init__.

Также помните, что не все должно быть установлено во время инициализации. В этом примере имеет смысл не устанавливать такие вещи, как nlegs в методе __init__. Вместо этого просто установите его непосредственно в классе. Например,

class Mammal(object):
    nlimbs = 4
    def __init__(self):
        print "I'm a mammal!"

class Cat(Mammal):
    def __init__(self, color="calico"):
        self.color = color
        super(Cat, self).__init__()
        print "I have {0} legs I am {1}".format(self.nlimbs, self.color)

class FiveLeggedCat(Cat):
    nlimbs = 5

В принципе, если что-то может измениться от экземпляра к экземпляру (например, цвет кошки) или должно быть выполнено при инициализации (например, открытие файла), то это, вероятно, должно быть установленным в __init__.

В противном случае, если это то, что мы хотим быть одинаковым для любого экземпляра класса, его можно установить чище, чтобы установить его непосредственно в определении класса.

Кроме того, атрибуты, установленные таким образом, будут доступны для инструментов документации (например, встроенная функция help), тогда как атрибуты, установленные при инициализации, не будут.

0
задан T.S. 16 January 2019 в 23:26
поделиться

1 ответ

Ваш сервис работает как пользователь. Обычно, когда вы создаете сервис, он устанавливает там учетную запись по умолчанию. Когда вы запускаете код вручную, он выполняется под вашими привилегиями. Когда служба запускает код, привилегии предоставляются учетной записи, под которой запускается служба. Просто зайдите на этот сервис и попробуйте запустить себя как

enter image description here

0
ответ дан T.S. 16 January 2019 в 23:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: