2015-01-31 3 views
0

Вот мой код на Python. Я пытаюсь создать класс, который делает файл манипуляции. Я использовал подобную структуру, как в этом URL, но я не могу добавить файл.Python присоединяется к файлу, открытому внутри класса

add_to_file.py -----------

import os 
import sys 

class add_to_file(object): 
    def __init__(self, filename): 
     self.data_file = open(filename,'a') 
    def __enter__(self): # __enter__ and __exit__ are there to support 
     return self  # `with self as blah` syntax 
    def __exit__(self, exc_type, exc_val, exc_tb): 
     self.data_file.close() 
    def __iter__(self): 
     return self 
    def __append__(s): 
     self.data_file.write(s) 
    __append__("PQR") 

add_to_file("Junk") 

Результат -------------------

Traceback (most recent call last): 
    File "add_to_file.py", line 4, in <module> 
    class add_to_file(object): 
    File "add_to_file.py", line 15, in add_to_file 
    __append__("PQR") 
    File "add_to_file.py", line 14, in __append__ 
    self.data_file.write(s) 
NameError: global name 'self' is not defined 
+0

Выполняет ли def __append __ (self, s) работу? – kren470

ответ

0

неясно, что именно вы пытаетесь достичь — это выглядит вроде контекста м класс ангара. Я переименовал __append__() в append(), потому что методы, начинающиеся и заканчивающиеся двойными символами подчеркивания, должны определяться только языком, и я переименовал ваш класс из add_to_file в AddToFile в соответствии с PEP 8 - Style Guide for Python Code.

import os 
import sys 

class AddToFile(object): 
    def __init__(self, filename): 
     self.data_file = open(filename,'a') 
    def __enter__(self): # __enter__ and __exit__ are there to support 
     return self  # `with self as blah` syntax 
    def __exit__(self, exc_type, exc_val, exc_tb): 
     self.data_file.close() 
    def __iter__(self): 
     return self 
    def append(self, s): 
     self.data_file.write(s) 


with AddToFile("Junk") as atf: 
    atf.append("PQR") 

with open("Junk") as file: 
    print(file.read()) # --> PQR 
+0

Спасибо, что отлично работает. Все еще пытаюсь выяснить некоторые basics__beginer_newbie –

+0

Самые важные вещи, которые были неправильными, вызывали метод 'append()' в самом определении класса и не имели в своем определении первоначальный аргумент 'self'. – martineau

2

Изменение def __append__(s): в def __append__(self, s):

+0

изменения в __append __ (самоощущение, с) не работает, –

+0

Traceback (самый последний вызов последнего): Файл "add_to_file.py", строка 4, в класса add_to_file (объект): Файл "add_to_file.py", строка 15, в add_to_file __append __ ("мусор", "PQR") Файл "add_to_file.py", строка 14, в __append__ self.data_file.write (ов) AttributeError: 'ул' объект не имеет атрибута «data_file ' –

Смежные вопросы