我是 Python 面向对象编程的新手,有一个似乎很简单的问题,需要一些指导。
如果我有以下myclass
正在初始化的对象self
和文件路径fname
:
class myclass(object):
def __init__(self, fname):
self.fname = fname
self.title = None
self.geo_list = []
一切似乎都有效。
a = myclass('a')
a
具有 中指定的三个属性__init__
。
但是如果我添加一行来检查以确保fname
不是空白或None
:
class myclass(object):
def __init__(self, fname):
self.fname = fname
self.title = None
self.geo_list = []
if self.fname == '' or self.fname is None:
raise AttributeError('Filename passed is blank.')
我得到了名称错误:
name 'self' is not defined
self
不是 Python 中的关键字,它只是一个本身没有意义的普通变量名。
但是有一个约定——据我所知是普遍遵循的,因此你应该遵循它——Python 类中每个方法的第一个参数都被称为self
. 而这第一个参数确实有点特殊,因为无论何时调用该方法,对象本身(它是类的实例)都会作为第一个参数传入 - 然后是所有其他显式给出的参数。因此,当您放置时a = myclass('a')
,该__init__
方法将'a'
作为第二个参数(您称之为fname
)和a
它本身作为第一个参数(按照惯例称为self
)被调用。[显然它不是那样的,因为a
直到__init__
已经回来了,但我认为这是一种合理的看待方式。]
所以你只能self
在方法内部访问,其中self
应该始终是第一个参数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句