Python, вопрос по работе классов

программирование Linux python

Как передеть методу класса переменную по умолчанию из самого класса? Т.е. что то вроде такого:
def MyClass:
def __init__(self, filename):
self.filename = filename
.
.
.
def write(self, filename = self.filename):
.
.
.
Если писать так, то пишет ошибку : NameError: name 'self' is not defined

Примечание:
>Зачем переменную передавать как аргумент, если метод и так будет ее видеть?
Вопрос не в том что бы передавать то что и так уже есть, а в том что бы использовать переменную по умолчанию, либо переназначить переменную при вызове метода класса.
Переменная filename задается при создании экземпляра: obj1 = MyClass('somefile.txt')
далее выполняются разные метода класса (класс- парсер для конфиг файла)
далее вызываем метод obj1.write() с параметром или без. Если без параметра- пишем в тот же файл с которого читали. Если с параметром- соответственно в тот файл который указали.
Сделал так:
def write(self, filename = ''):
fname = filename or self.filename
...
Ответы:
Зачем переменную передавать как аргумент, если метод и так будет ее видеть?
Если переменная статична то передавать её как аргумент в конструктор класса не имеет смысла. Если же переменная не статична, но должна иметь значение по дефолту то как и обычно "def __init__(self, filename = '...'):". Ну а после, при необходимости, можно инициализировать свойство экземпляра класса "self.filename = filename".  Таким образом при создании экземпляра класса obj = MyClass() переменная filename так же как и свойство объекта obj.filename будут установлены по дефоту ('...'). Если же инициализировать объект как obj = MyClass('/usr/bin/python'). То и переменная и свойство объекта будут установлены как '/usr/bin/python'


12 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

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

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.