Victor0321 发表于 2022-4-24 23:06:37

关于类里面的函数定义

为什么我定义类的方法的时候,这种嵌套函数怎么定义不会出错啊。。。 我一把load_encode这个函数放在外部跟url_read并列的时候 就能运行了。。。

import chardet as cha ##查询编码器
import urllib.request

class Urlread:
    def url_read(self, html = ''):
      def load_encode(self):
            '''读取网站编码器信息,并相应解码'''
            self.encoding_method = cha.detect(self.response)['encoding']
            if self.encoding_method == 'GB2312' :
                self.encoding_method = 'GBK'
            return self.encoding_method
      self.html = html
      self.response = urllib.request.urlopen(self.html).read() #读取网站内容
      self.load_encode()
      return self.response.decode(self.encoding_method)
   
u = Urlread()
print(u.url_read(r'http://www.fishc.com'))   
      

isdkz 发表于 2022-4-25 08:17:55

import chardet as cha ##查询编码器
import urllib.request

class Urlread:
    def url_read(self, html = ''):
      def load_encode(self):
            '''读取网站编码器信息,并相应解码'''
            self.encoding_method = cha.detect(self.response)['encoding']
            if self.encoding_method == 'GB2312' :
                self.encoding_method = 'GBK'
            return self.encoding_method
      self.html = html
      self.response = urllib.request.urlopen(self.html).read() #读取网站内容
      load_encode(self)                                    # 修改这一行
      return self.response.decode(self.encoding_method)
   
   
u = Urlread()
print(u.url_read(r'http://www.fishc.com'))   

Victor0321 发表于 2022-4-25 10:15:05

isdkz 发表于 2022-4-25 08:17


噢噢噢噢! 这种地方就不用加实例了对吧, 因为它已经是url_read() 这个方法的内嵌函数了

isdkz 发表于 2022-4-25 10:23:19

Victor0321 发表于 2022-4-25 10:15
噢噢噢噢! 这种地方就不用加实例了对吧, 因为它已经是url_read() 这个方法的内嵌函数了

对的。内嵌相当于局部,就跟局部变量一样前面不用加 self

Victor0321 发表于 2022-4-25 10:53:47

isdkz 发表于 2022-4-25 10:23
对的。内嵌相当于局部,就跟局部变量一样前面不用加 self

0.那我内嵌函数里的局部变量是不是也都可以不用加实例self.,比如说self.encoding_method 这个地方,即使外部函数要用到,也不需要跟self 链接对吧!

1.然后这种内嵌函数的内层函数,我从g整体外部框架内都无法访问的对吧!
页: [1]
查看完整版本: 关于类里面的函数定义