На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: RaD
  
    > вызов метода предка , Python 2.7
      на Python 3.7 OK
      ExpandedWrap disabled
        class Person():
            def __init__(self, name, age):
                self.name = name
                self.age = age
         
        class JavaDrocher(Person):
            def __init__(self, name, age, grade):
                super().__init__(name, age)
                self.grade = grade
         
        gregory = JavaDrocher('Gregory', 42, 10)

      но в Python 2.7 не работает! Пробовал вот так
      ExpandedWrap disabled
        class JavaDrocher(Person):
            def __init__(self, name, age, grade):
                super(JavaDrocher, self).__init__(name, age) # не работает!
                self.grade = grade
         
        gregory = JavaDrocher('Gregory', 42, 10)

      ошибка 'TypeError: must be type, not classobj'
        Думаю надо
        ExpandedWrap disabled
          class Person(object):
        ибо без object -- старый стиль определения класса (в 2.7 само-собой)
        Сообщение отредактировано: piksel -
          Цитата piksel @
          ибо без object -- старый стиль определения класса
          В Python 3000 (версии 3.*) разницы нет, оба определения эквивалентны. В 2.7, помнится, существуют две разновидности классов legasy - унаследованные от старых версий, и новые, подобные классам Python 3000. Соответственно отличается и наследование. Правда, чем отличается их определение, уже не помню.
            Цитата piksel @
            Думаю надо
            ExpandedWrap disabled
              class Person(object):
            ибо без object -- старый стиль определения класса

            Бинго! :D

            Спасибо! Заработало!

            Цитата
            in Python 2 we have to inherit from object explicitly, otherwise our class will be almost completely empty except for our own custom properties. Classes which don’t inherit from object are called “old-style classes”, and using them is not recommended. If we were to write the person class in Python 2 we would write the first line as class Person(object):.


            Цитата
            в Python 2 мы должны явно наследовать object, иначе наш класс будет почти полностью пуст, за исключением наших собственных пользовательских свойств. Классы, которые не наследуются object, называются "классами старого стиля", и их использование не рекомендуется. Если бы мы написали класс person в Python 2, мы бы написали первую строку как class Person(object):


            https://python-textbok.readthedocs.io/en/1.0/Classes.html
            Сообщение отредактировано: Cfon -
              Еще один способ вызвать метод предка
              ExpandedWrap disabled
                class JavaDrocher(Person):
                    def __init__(self, name, age, grade):
                        Person.__init__(self, name, age)
                        self.grade = grade

              Где-то я уже похожее видел догадайтесь где :D
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0228 ]   [ 15 queries used ]   [ Generated: 16.04.24, 10:24 GMT ]