__init__ 里面的def 函数什么时候执行
class test(object):def __init__(self):
print('s')
def a():
print('sss')
s = test()
def a() 怎么调用的 没调用 应该是缩进错误吧?我更改了一下!
class test(object):
def __init__(self):
print('s')
def a():
print('sss')
s = test()
本帖最后由 jackz007 于 2022-10-14 17:21 编辑
1、__init__()是在实例化对象的时候被自动调用
s = test() # __init__() 在这个时候被自动调用
2、a() 是 __init__() 的内嵌函数,其作用域仅限于__init__()内,也就是说,只能供 __init__() 自己调用,如果在 __init__() 内没有被调用,那么,可以下断言,这个函数无用,出了__init__(),也就是出了内嵌函数 a() 的作用域,a() 根本就不可见,从而,无法被调用。 非要嵌套放在 __init__ 里面,又要外部调用, 虽然也不是不可以(如下所示),但这样太怪了,甚至多余和混乱。
class test(object):
def __init__(self):
print('s')
def a():
print('sss')
self.a = a
s = test()
s
s.a()
sss
# 实际应该用不上 这样怪异的写法,还不如3楼那样直接定义和绑定。
class test(object):
def __init__(self):
print('s')
def a():
print('sss')
a()
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: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:33 编辑
阿奇_o 发表于 2022-10-14 19:08
非要嵌套放在 __init__ 里面,又要外部调用, 虽然也不是不可以(如下所示),但这样太怪了,甚至多余和混 ...
页:
[1]