Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解python中的变量作用域:一个练习程序_Python - Fatal编程技术网

理解python中的变量作用域:一个练习程序

理解python中的变量作用域:一个练习程序,python,Python,这是一个我想尝试的练习,因为我觉得它很有趣。这个练习对于它正在做的事情来说是不必要的复杂,但是它试图作为实践来理解更复杂的python程序中的类、函数和变量行为 import os class grabFile: fileObject = None def __init__(self, filename): self.fileObject = open(filename, "r") def getFile(): return self.

这是一个我想尝试的练习,因为我觉得它很有趣。这个练习对于它正在做的事情来说是不必要的复杂,但是它试图作为实践来理解更复杂的python程序中的类、函数和变量行为

import os

class grabFile:
    fileObject = None
    def __init__(self, filename):
        self.fileObject = open(filename, "r")

    def getFile():
        return self.fileObject

class counter:
    fileC = None
    lineCount = 0
    def __init__(self, fileObject):
        self.fileC = fileObject

    def lineCounter(self):
        while True:
            self.fileC.readline()
            print(x)
        return lineCount


def Main():
    fileGrabber = grabFile("test.txt")
    fileObj = fileGrabber.getFile

    countObj = counter(fileObj)
    lineCount = countObj.lineCounter()
    print(lineCount)

Main()
但是,当我运行此操作时,会出现以下错误:

Traceback (most recent call last):
  File "/home/may/Desktop/Tree/Programming/MiscProjects/TextAnalyzer.py", line 32, in <module>
Main()
  File "/home/may/Desktop/Tree/Programming/MiscProjects/TextAnalyzer.py", line 29, in Main
lineCount = countObj.lineCounter()
  File "/home/may/Desktop/Tree/Programming/MiscProjects/TextAnalyzer.py", line 19, in lineCounter
self.fileC.readline()
AttributeError: 'function' object has no attribute 'readline'
[Finished in 0.2s with exit code 1]
回溯(最近一次呼叫最后一次):
文件“/home/may/Desktop/Tree/Programming/MiscProjects/textlanalyzer.py”,第32行,在
Main()
文件“/home/may/Desktop/Tree/Programming/MiscProjects/textlanalyzer.py”,第29行,在Main中
lineCount=countObj.lineCounter()
文件“/home/may/Desktop/Tree/Programming/MiscProjects/textlanalyzer.py”,第19行,行计数器中
self.fileC.readline()文件
AttributeError:“函数”对象没有属性“readline”
[在0.2秒内完成,退出代码为1]
有人能帮我完全理解这个程序吗?此外,尽管这不是一个正确的提问地点,但对程序的样式或格式有何评论?尤其是“自我”的使用


谢谢大家!

我想你是想调用这个方法:

fileObj = fileGrabber.getFile()
您需要更改为实例方法:

def getFile(self):
    return self.fileObject
您的行计数器方法需要做一些工作:

def lineCounter(self):
    self.lineCount = len(self.fileC.readlines())
    return self.lineCount

我想你是想调用这个方法:

fileObj = fileGrabber.getFile()
您需要更改为实例方法:

def getFile(self):
    return self.fileObject
您的行计数器方法需要做一些工作:

def lineCounter(self):
    self.lineCount = len(self.fileC.readlines())
    return self.lineCount

我想你是想调用这个方法:

fileObj = fileGrabber.getFile()
您需要更改为实例方法:

def getFile(self):
    return self.fileObject
您的行计数器方法需要做一些工作:

def lineCounter(self):
    self.lineCount = len(self.fileC.readlines())
    return self.lineCount

我想你是想调用这个方法:

fileObj = fileGrabber.getFile()
您需要更改为实例方法:

def getFile(self):
    return self.fileObject
您的行计数器方法需要做一些工作:

def lineCounter(self):
    self.lineCount = len(self.fileC.readlines())
    return self.lineCount


这不是实例化。这是一个简单的函数调用。我也认为这是正确的方法,但当我这样做时,我得到一个错误,关于getFile如何有0个位置参数,但我给了它1?@KarolyHorvath我的错,我想我睡着了。@Utagai回答更新。您的方法没有将任何实例对象作为参数。另外,您的行计数器方法是一个无目的的无限循环。请尝试此处的代码。这不是实例化。这是一个简单的函数调用。我也认为这是正确的方法,但当我这样做时,我得到一个错误,关于getFile如何有0个位置参数,但我给了它1?@KarolyHorvath我的错,我想我睡着了。@Utagai回答更新。您的方法没有将任何实例对象作为参数。另外,您的行计数器方法是一个无目的的无限循环。请尝试此处的代码。这不是实例化。这是一个简单的函数调用。我也认为这是正确的方法,但当我这样做时,我得到一个错误,关于getFile如何有0个位置参数,但我给了它1?@KarolyHorvath我的错,我想我睡着了。@Utagai回答更新。您的方法没有将任何实例对象作为参数。另外,您的行计数器方法是一个无目的的无限循环。请尝试此处的代码。这不是实例化。这是一个简单的函数调用。我也认为这是正确的方法,但当我这样做时,我得到一个错误,关于getFile如何有0个位置参数,但我给了它1?@KarolyHorvath我的错,我想我睡着了。@Utagai回答更新。您的方法没有将任何实例对象作为参数。另外,您的行计数器方法是一个无目的的无限循环。请尝试此处的代码。