python鱼new 发表于 2022-10-14 16:27:13

__init__ 里面的def 函数什么时候执行

class test(object):
    def __init__(self):
      print('s')
      def a():
            print('sss')


s = test()

def a() 怎么调用的

tommyyu 发表于 2022-10-14 16:33:09

没调用

dragov 发表于 2022-10-14 16:37:46

应该是缩进错误吧?我更改了一下!
class test(object):
    def __init__(self):
      print('s')
    def a():
      print('sss')
s = test()



jackz007 发表于 2022-10-14 16:45:10

本帖最后由 jackz007 于 2022-10-14 17:21 编辑

      1、__init__()是在实例化对象的时候被自动调用
s = test()    # __init__() 在这个时候被自动调用

      2、a() 是 __init__() 的内嵌函数,其作用域仅限于__init__()内,也就是说,只能供 __init__() 自己调用,如果在 __init__() 内没有被调用,那么,可以下断言,这个函数无用,出了__init__(),也就是出了内嵌函数 a() 的作用域,a() 根本就不可见,从而,无法被调用。

阿奇_o 发表于 2022-10-14 19:08:19

非要嵌套放在 __init__ 里面,又要外部调用, 虽然也不是不可以(如下所示),但这样太怪了,甚至多余和混乱。
class test(object):
    def __init__(self):
      print('s')
      
      def a():
            print('sss')
      self.a = a

      
s = test()
s
s.a()   
sss

# 实际应该用不上 这样怪异的写法,还不如3楼那样直接定义和绑定。

hveagle 发表于 2022-10-14 19:20:06

class test(object):
    def __init__(self):
      print('s')
      def a():
            print('sss')
      a()

fcage 发表于 2022-10-14 22:57:53

init只在实例化对象的时候调用,如果这里面不使用a,之后就不可能在调用了
所以用self.a类似保存了这个函数吧,之后就可以屌用了
class test(object):
    def __init__(self):
      print('s')
      def a():
            print('sss')
      self.a = a


s = test()
s.a()

python鱼new 发表于 2022-10-17 11:23:33

本帖最后由 python鱼new 于 2022-10-17 11:34 编辑

阿奇_o 发表于 2022-10-14 19:08
非要嵌套放在 __init__ 里面,又要外部调用, 虽然也不是不可以(如下所示),但这样太怪了,甚至多余和混 ...

我在看一个项目,看懂了,它在最后调用了if get_google_credentials:
class KubeConfigLoader(object):

    def __init__(self, config_dict, active_context=None,
               get_google_credentials=None,
               config_base_path="",
               config_persister=None,
               temp_file_path=None):

      if config_dict is None:
            raise ConfigException(
                'Invalid kube-config. '
                'Expected config_dict to not be None.')
      elif isinstance(config_dict, ConfigNode):
            self._config = config_dict
      else:
            self._config = ConfigNode('kube-config', config_dict)

      self._current_context = None
      self._user = None
      self._cluster = None
      self.set_active_context(active_context)
      self._config_base_path = config_base_path
      self._config_persister = config_persister
      self._temp_file_path = temp_file_path

      def _refresh_credentials_with_cmd_path():
            config = self._user['auth-provider']['config']
            cmd = config['cmd-path']
            if len(cmd) == 0:
                raise ConfigException(
                  'missing access token cmd '
                  '(cmd-path is an empty string in your kubeconfig file)')
            if 'scopes' in config and config['scopes'] != "":
                raise ConfigException(
                  'scopes can only be used '
                  'when kubectl is using a gcp service account key')
            args = []
            if 'cmd-args' in config:
                args = config['cmd-args'].split()
            else:
                fields = config['cmd-path'].split()
                cmd = fields
                args = fields

            commandTokenSource = CommandTokenSource(
                cmd, args,
                config.safe_get('token-key'),
                config.safe_get('expiry-key'))
            return commandTokenSource.token()

      def _refresh_credentials():
            # Refresh credentials using cmd-path
            if ('auth-provider' in self._user and
                'config' in self._user['auth-provider'] and
                  'cmd-path' in self._user['auth-provider']['config']):
                return _refresh_credentials_with_cmd_path()

            credentials, project_id = google.auth.default(scopes=[
                'https://www.googleapis.com/auth/cloud-platform',
                'https://www.googleapis.com/auth/userinfo.email'
            ])
            request = google.auth.transport.requests.Request()
            credentials.refresh(request)
            return credentials

      if get_google_credentials:
            self._get_google_credentials = get_google_credentials
      else:
            self._get_google_credentials = _refresh_credentials

python鱼new 发表于 2022-10-17 11:24:21

本帖最后由 python鱼new 于 2022-10-17 11:33 编辑

阿奇_o 发表于 2022-10-14 19:08
非要嵌套放在 __init__ 里面,又要外部调用, 虽然也不是不可以(如下所示),但这样太怪了,甚至多余和混 ...

页: [1]
查看完整版本: __init__ 里面的def 函数什么时候执行