Большая часть “pythonic” способа организовать атрибуты класса, аргументы конструктора и значения по умолчанию конструктора подкласса?

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

( Прототип пример)

myNodes = document.body.descendants()
alert(document.body.descendants()[1].innerHTML)

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

17
задан Shabbyrobe 13 July 2009 в 07:24
поделиться

2 ответа

  • Если атрибуты будут отличаться от экземпляра для экземпляра сделать их экземпляр атрибут, т.е. создать их внутри __ init __ используя self иначе, если им нужно быть разделенным между экземплярами класса как константа, поместите их в класс уровень.

  • Если ваш класс действительно нужно сдать, так что много аргументов в __ init __ , пусть получить список аргументов использования класса и аргументы ключевого слова например

class Dog(ClassWithLotsOfAttributes):
    def __init__(self, *args , **kwargs):
        super(ClassWithLotsOfAttributes,    self).__init__(*args , **kwargs)
        self.coolness = "really cool!!!
  • Нет необходимости передавать все переменные, кроме нескольких важных, в __ init __ , класс может принимать некоторые значения по умолчанию, и пользователь может их изменить позже, если потребуется.
  • Используйте 4 пробела вместо табуляции.

  • если вам нужно добавить дополнительный аргумент, также в Dog и ключевое слово arg old

class CoolDog(ClassWithLotsOfAttributes):
    def __init__(self, bite, *args , **kwargs):
        self.old = kwargs.pop('old', False) # this way we can access base class args too
        super(ClassWithLotsOfAttributes,    self).__init__(*args , **kwargs)
        self.bite = bite
        self.coolness = "really really cool!!!

различные способы использованияCoolDog

CoolDog(True)
CoolDog(True, old=False)
CoolDog(bite=True, old=True)
CoolDog(old=True, bite=False)
7
ответ дан 30 November 2019 в 14:45
поделиться

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

Если вам действительно нужно иметь такое количество атрибутов, я думаю, вам придется смириться с назначением их всех, тем более что вам нужны значения по умолчанию для всех них. Однако вам не нужно переназначать значения по умолчанию в ваших подклассах (я вижу, что Anurag Uniyal показал, как это сделать.)

Вы должны назначить их self , однако, а не как атрибуты класса. Обратите внимание на разницу:

class Class1(object):
    attr1 = 'abc'

class Class2(object):
    def __init__(self):
        self.attr1 = 'abc'

Class1.attr1 # returns 'abc'
c = Class1()
c.attr1 # Also returns 'abc'
Class1.attr1 = 'def'
c.attr1 # Returns 'def'!
c.attr1 = 'abc' # Now the c instance gets its own value and will show it
                # independently of what Class1.attr1 is. This is the same
                # behavior that Class2 exhibits from the start.
-1
ответ дан 30 November 2019 в 14:45
поделиться
Другие вопросы по тегам:

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