2015-03-25 2 views
0

Ive получил вполне комфортно в прошлом году кодирование в python, но я остался в стороне от Classes (как в структурировании моего кода в них), потому что я их не понял.Docopt и классы

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

Я пытался использовать сценарий примера, который я написал, и передал его на версию класса. Безопасно сказать, что я сосать плохо и не могу заставить мой простой скрипт работать. Я уверен, что есть мириады этого Im, которые, скорее всего, делают неправильно. Я бы очень признателен, что кто-то указал на меня.

Я не очки ума палец и живот смеется тоже^_^

Coder После (не работает)

""" 
Description: 

This script is used to walk a directory and print out each filename and directory including the full path. 

Author: Name 

Usage: 
    DirLister.py (-d <directory>) 
    DirLister.py -h | --help 
    DirLister.py --version 

Options: 
    -d <directory>  The top level directory you want to list files and directories from. 
    -h --help   Show this screen. 
    --version   Show version. 
    """ 

import os 
from docopt import docopt 

class walking: 
    def __init__(self, directory): 
     self.directory = arguments['-d'] 

    def walk(self, directory): 
     for root, dirs, files in os.walk(self.directory): 
      for filename in files: 
      print os.path.join(root, filename) 

if __name__ == '__main__': 

    arguments = docopt(__doc__, version= '1.0.0') 
    print arguments 
    if arguments['-d'] is None: 
     print __doc__ 
     exit(0) 
    else: 
     walking.walk(directory) 

Оригинал неклассовых код на основе (рабочий)

""" 
Description: 

This script is used to walk a directory and print out each filename and  directory including the full path. 

Author: Name 

Usage: 
    DirLister.py (-d <directory>) 
    DirLister.py -h | --help 
    DirLister.py --version 

Options: 
    -d <directory>  The top level directory you want to list files and directories from. 
    -h --help   Show this screen. 
    --version   Show version. 
    """ 

import os 
from docopt import docopt 

arguments = docopt(__doc__, version= '1.0.0') 

def walk(dir): 

    for root, dirs, files in os.walk(dir): 
     for filename in files: 
      print os.path.join(root, filename) 

if __name__ == '__main__': 

    if arguments['-d'] is None: 
     print __doc__ 
     exit(0) 
    else: 
     walk(arguments['-d']) 

ответ

1

Вы забыли опубликовать ошибку, которую вы получили (так как вы говорите, что она не работает).

Но действительно есть несколько вопросов. Сначала я бы назвал класс Walking.

Затем в вашей функции __init__ вы пытаетесь получить доступ к arguments, который не является ни глобальной переменной, ни аргументом; Вы хотели написать:

def __init__(self, directory): 
    self.directory = directory 

Но вы также должны создать экземпляр вашего класса в вас main:

walking = Walking(arguments['-d']) 

Это предполагает, что имя класса Walking вместо walking. Я советую вам посмотреть на PEP8 для соглашений об именах.

Общая идея заключается в том, что класс является типом объекта, но не сам объект *, поэтому блок class Walking: в основном определяет новый вид объектов. И тогда вы можете создавать объекты, являющиеся экземплярами этого класса. То же самое, когда вы создаете список: mylist = list() (но есть и другие способы для списков, таких как mylist = [1, 2]).

* Бывает, что большинство вещей в Python являются объектами, включая классы, но у них есть, очевидно, другие методы, и у них есть другой базовый класс.

+0

Спасибо @Francis Colas, это имеет смысл и, конечно же, теперь работает. Я собираюсь сделать еще несколько сценариев с нуля в стиле класса и посмотреть, смогу ли я с этим справиться. И я рассмотрю соглашение об именах. – iNoob

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