0

クラス インスタンス メンバーの動的な作成に問題があります。ディレクトリのように動作し、クラスに含まれるファイルにちなんで名付けられたインスタンス メンバーを持つクラス オブジェクトを作成しようとしています。

ただし、__setitem__()クラスのメソッドに到達できません。私はこれに間違って近づいているかもしれません。私はわかりません。

これが私のコードです:

import IPython
import sys, os
ipath =  IPython.utils.path.get_ipython_dir()
tutorial_config = "%s/profile_peter/startup"%ipath
sys.path.append(tutorial_config)
from tutorial_helpers import directoryClass, fileClass
## Determine Operating System
if sys.platform == "win32":
        OperatingSystem = "Windows"
elif sys.platform =="linux2":
        OperatingSystem = "Linux"
else:
    raise Exception("could not find OS")
print OperatingSystem
root_path = os.getcwd()


class OS_appropriete_file():
    separator = None
    def __init__(self, rootPath, relative_path):
        self.create_separator(relative_path)
        self = fileClass(rootPath+self.separator+relative_path)
    def create_separator(self,relative_path):
        if OperatingSystem == "Windows":
            escape_sequences = ['a','b','f','t','v','n','r','x']
            self.separator = "\\"
        elif OperatingSystem == "Linux":
            self.separator = "/"



class dirClass(object):
    def __init__(   self,root,newFileName):
        separator = self.create_separator(newFileName)
        self.root = root+separator+newFileName
    def create_file(self,fileName):
        FileName_withoutExtension = fileName.split(".")[0]
        print "extless:"
        print FileName_withoutExtension
        super(dirClass,self).__setitem__(FileName_withoutExtension,             OS_appropriete_file(self.root,fileName))
        #self.__class__.__dict__[FileName_withoutExtension] = OS_appropriete_file(self.root,fileName)
def create_separator(self,relative_path):
    if OperatingSystem == "Windows":
        escape_sequences = ['a','b','f','t','v','n','r','x']
        separator = "\\"
    elif OperatingSystem == "Linux":
        separator = "/"

    return separator



class files():
    mypackage=dirClass(root_path,"mypackage")
    mypackage.create_file("__init__.py")
    mypackage.create_file("main.py")
    ## subpackage
    subpackage1=dirClass(root_path,"subpackage1")
    subpackage1.create_file("sub1.py")
    subpackage1.create_file("__init__.py")
    subpackage2=dirClass(root_path,"subpackage2")
    subpackage2.create_file("sub2.py")
    subpackage2.create_file("__init__.py")


if __name__ == "__main__":
    fileEx = files()

を使用してこのファイルをインポートするfrom referenced_paths_and_files import *と、次のエラーが表示されます。

AttributeError: 'super' object has no attribute '__setitem__'

私がやろうとしているのは、OS_apppropriete_file のインスタンスである引数「newFileName」にちなんで名付けられたメンバー変数を持つ dirClass インスタンスを作成することです。

助けてくれてありがとう!

4

2 に答える 2

1

objectメソッドありません。インデックス作成をサポートするタイプではありません。変更可能なシーケンス オブジェクトとマッピング オブジェクトのみが を実装します。このメソッドは通常、インデックス割り当て ( ) にフックするために使用されます。__setitem____setitem__obj[key] = value

代わりに属性を設定したかったのではないかと思います。setattr()その場合は、 on を使用してselfください:

setattr(self, FileName_withoutExtension, OS_appropriete_file(self.root,fileName))
于 2013-09-04T20:49:45.630 に答える
0

でメソッドを使用するには、 でメソッド__setitem__を実装する必要があるようです。メソッドは、それを使用する各クラスが実装する必要がある抽象メソッド/インターフェースです。dirClasscreate_file__setitem__

この参照は関連している可能性があります。

于 2013-09-04T20:55:26.607 に答える