【问题标题】:python abstractmethods: appending a list to a subclass from abstractmethodpython abstractmethods:将列表附加到abstractmethod的子类
【发布时间】:2021-09-01 07:48:28
【问题描述】:

我正在尝试熟悉抽象类,但不知道如何附加到类中的空列表。这就是我工作的目录的样子:

 my_dir
  |__data
  |    |__colors
  |    |    |__light_colors.csv
  |    |    |__dark_colors.csv
  |    |    |__cold_colors.json
  |    |__ages
  |__code
       |__data_reader.py
       |__config.py

在我的配置文件中:

import os

REPO_ROOT_DIRECTORY = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
colors_DATA_DIRECTORY = os.path.join(REPO_ROOT_DIRECTORY, "data")

在我的 data_reader.py 文件中,我有以下代码,它是一个抽象类。

from abc import ABC, abstractmethod
from config import colors_DATA_DIRECTORY
import os

class PathReader(ABC):

    @abstractmethod
    def read_data_type(self): pass
    
class colorReader(PathReader):
    def __init__(self):
        self.path_to_types = os.path.join(colors_DATA_DIRECTORY, 'colors')
        colors= []

    def read_data_type(self):
        for files in os.listdir(self.path_to_types):
            colors.append(os.path.join(self.path_to_types, files))

 g= colorReader()
 print(g.read_data_type())

然而,列表颜色= [] 似乎是空的,理想情况下我想在另一个抽象类中使用这个列表,所以我可以检查存储在列表中的文件的扩展名,所以这就是代码data_reader.py 继续。

class ExtensionReader(ABC):

    @abstractmethod
    def file_extension_reader(self): pass

class csvFileExtension(ExtensionReader): 
    def __init__(self, file_type: PathReader):
        self.file_type = file_type
    
    def file_extension_reader(self):
        for files in self.file_type:
        if files.split(".")[1] == 'csv':
            print(files) 

但这是我不知道如何使用颜色 =[] 列表来检查以 .csv 结尾的文件的扩展名的地方

【问题讨论】:

  • 不要编辑您的问题来解决您的代码问题。如果您有新问题,您应该在 StackOverflow 上创建一个新问题。

标签: python list class append abstract-methods


【解决方案1】:

这与抽象类无关。您忘记将colors 变量设为self 的属性:

from abc import ABC, abstractmethod
from config import colors_DATA_DIRECTORY
import os

class PathReader(ABC):

    @abstractmethod
    def read_data_type(self): pass
    
class colorReader(PathReader):
    def __init__(self):
        self.path_to_types = os.path.join(colors_DATA_DIRECTORY, 'colors')
        self.colors= []

    def read_data_type(self):
        for files in os.listdir(self.path_to_types):
            self.colors.append(os.path.join(self.path_to_types, files))

 g= colorReader()
 print(g.read_data_type())

【讨论】:

  • 感谢您的回复,我已经更正了代码,但是列表仍然是空的。我认为附加不起作用
  • fyi print(g.read_data_type() 将始终打印 None,因为该函数不返回任何内容。
  • 我确实意识到了这一点,但有趣的是当我在 self.colors = [] 之后写 print(self.colors) 时,它说列表是空的。
  • @zarakolagar 那么您的read_data_type 方法中存在错误。考虑提出一个新问题。
  • 谢谢你,我会的。但我不确定read_data_type是否有错误,因为打印for循环中的文件,返回目录中的三个文件
猜你喜欢
  • 2021-12-10
  • 2013-06-18
  • 2021-11-13
  • 1970-01-01
  • 2019-03-29
  • 2012-12-20
  • 2014-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多