Пожалуйста, поправьте меня, если я не понял, что вы ищете правильно, и я могу соответствующим образом скорректировать ответ, но из того, что я получил, вы ищете атрибуты класса и экземпляра и различие между ними:
class A:
filepath = None
def __init__(self, name):
self.name = name
A.filepath = "/path/to/original/file"
a = A("Alice")
print(a.filepath)
a.filepath = "/path/to/another/file"
print(a.filepath)
b = A("Bob")
print(b.filepath)
Определение класса A
(примечание: в python 3 все классы выполнены в новом стиле, и я предполагаю, что наследование от object
предназначалось для защиты привычек Python 2), мыопределить атрибут класса filepath
.Строго говоря, в этом нет необходимости, но если это предназначенная часть интерфейса ... Конечно, вы также можете указать первое начальное значение по умолчанию непосредственно в определении класса.
Затем мы присваиваем наше первое значение '/path/to/original/file'
к этому.В этот момент мы создаем экземпляр a
класса A
, и когда мы получаем доступ к его атрибуту filepath
, мы получаем значение атрибута класса.Затем мы присваиваем другое значение атрибуту экземпляра (a.filepath
) и, снова обращаясь к нему, получаем его значение обратно, пока мы не изменили атрибут класса A.filepath
, который мы также видим для вновь созданного экземпляра b
.
Но будьте осторожны, смешивая назначения для атрибутов класса и экземпляра (с одним и тем же именем, может вызвать путаницу и, возможно, непреднамеренное поведение. Учтите это:
A.filepath = "/path/to/original/file"
a = A("Alice")
a.filepath = "/path/to/another/file"
b = A("Bob") # b.filepath is "/path/to/original/file"
A.filepath = "/third/file"
c = A("Carl")
Теперь доступ к a.filepath
дает "/path/to/another/file"
, но для b.filepath
и c.filepath
есть "/ third / file", что может или не может быть тем, что мы хотели, особенно для b.filepath
.
Следовательно, для аналогичного варианта использованияЯ бы предпочел что-то вроде:
class A:
default_filepath = "/path/to/original/file"
def __init__(self, name):
self.filepath = self.default_filepath
self.name = name
a = A("Alice")
a.filepath = "/path/to/another/file"
b = A("Bob")
A.default_filepath = "/third/file"
c = A("Carl")
Класс имеет атрибут default_filepath
, который используется для присвоения каждому экземпляру атрибута self.filepath
. Это должно помочь уменьшить риск ошибок. В приведенном выше примере это:
a.filepath
b.filepath
c.filepath
Теперь имеют значения:
/path/to/another/file
/path/to/original/file
/third/file