【问题标题】:The lists are not passing to main class列表没有传递给主类
【发布时间】:2017-11-21 22:35:49
【问题描述】:

抱歉,我是 Python 新手,我知道答案应该是显而易见的。我有一个用参数和构造函数组织的类,但我不能在 main 中调用该类的任何方法。我想,这可能与列表传递有关。

class PersonData:
def __init__(self,nameSet=[],hoursNeed=[],daysOff=[]):
    self.__nameSet=nameSet
    self.__hoursNeed=hoursNeed
    self.__daysOff=daysOff

    def getNameSet(self):
        return self.nameSet

    def setHoursNeed(self,hoursNeed):
        self.hoursNeed=hoursNeed

    def setDaysOff(self,daysOff):
        self.daysOff=daysOff

    def RandomFulfil(nameSet):  #JUST FOR CHECK
        for element in nameSet:
            print(element)

主要在这里:

from PersonData import PersonData
def main():
nameList=[]
hoursList=[]
daysOffList=[]


print("How many employees you have: ")
N=int(input())
for x in range(N):
    print("Enter employees names now: ",N," left: ")
    x=input("")
    nameList.append(x)
    print("Enter employees working hours per week now:")
    y=input("")
    hoursList.append(y)
    print("Enter employees days off per week now:")
    z=input("")
    daysOffList.append(z)
    N-=1

people=PersonData(nameList,hoursList,daysOffList)
#people.any method    <---- this one is not working

编辑: 现在我将它们更改为私有形式,我可以访问这些字段,但仍然不必访问方法。

    def __init__(self,nameSet,hoursNeed,daysOff):
    self.nameSet=nameSet
    self.hoursNeed=hoursNeed
    self.daysOff=daysOff

【问题讨论】:

  • 你的代码有很多地方不太对劲。 1. 您使用可变容器作为默认参数 2. 您的一些实例变量被破坏(我不确定您的意图是什么),以及 3. 您正在访问这些方法中不存在的属性。
  • 请查看我的更新

标签: python list function class


【解决方案1】:

在使用任何方法时,您可能会收到AttributeError,因为它们尝试访问的变量根本不存在:

您在构造函数中初始化的成员与您在其他方法中尝试使用的成员完全不同:self.__nameSetself.nameSet 不同,self.__daysOffself.daysOff 不同等。

此外,您不应该使用可变约束器作为默认参数(不要在构造函数中使用nameSet=[] 等)。

【讨论】:

  • 另外,我不知道如何在构造函数中显示我将使用 nameSet 和 HourSet 作为列表。
  • @VladDemyan 您可以在分配前通过isinstance(given_argument, list) 检查给定类型是否为列表。 Docs.
  • @VladDemyan 好的,我检查了您的更新,再次,您说“您没有方法”是什么意思?如果您没有正确描述您的问题,我们将无能为力。
  • 我的意思是,在我尝试调用例如 getNameSet 时,没有看到 people.getNameSet()。我的意思是我可以访问字段,但不能访问方法。
  • “未见”是什么意思?你有任何错误吗?当您执行people.getNameSet() 时会发生什么?
猜你喜欢
  • 1970-01-01
  • 2021-03-05
  • 2019-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-29
相关资源
最近更新 更多