1.__init__
__init__ 方法通常用在初始化一个类实例的时候,例如:
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
2.__str__
__str__用来返回对象的字符串表达式。例如:
class Person(object):
def __init__(self, name):
super(Person, self).__init__()
self.name = name
def __str__(self):
return'Hola,%s' % self.name
lina = Person('Lina')
print(lina)
在我们编写一个新的Python类的时候,总是在最开始位置写一个初始化方法__init__,以便初始化对象,然后会写一个__str__方法,方面我们调试程序。
3.__new__
__new__方法的调用是发生在__init__之前的
class Person(object):
def __new__(cls,*args, **kwargs):
print('new called')
return object.__new__(cls)
def __init__(self, name):
print('init called')
super(Person, self).__init__()
self.name = name
def __str__(self):
return'Hola,%s' % self.name
lina = Person('Lina')
print(lina)
__new__至少要有一个参数cls,代表要实例化的类,此参数在实例化时由Python解释器自动提供
__new__必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别注意,可以return父类__new__出来的实例,或者直接是object的__new__出来的实例
__init__ 和 __new__ 最主要的区别在于:
1.__init__ 通常用于初始化一个新实例,控制这个初始化的过程,比如添加一些属性, 做一些额外的操作,发生在类实例被创建完以后。它是实例级别的方法。
2.__new__ 通常用于控制生成一个新实例的过程。它是类级别的方法。
__new__ 的作用
依照Python官方文档的说法,__new__方法主要是当你继承一些不可变的class时(比如int, str, tuple), 提供给你一个自定义这些类的实例化过程的途径。还有就是实现自定义的metaclass。
4.__name__和__main__
为了区分 主执行代码和被调用文件,python引入了变量:__name__。__name__就是标识模块的名字的一个系统变量。这里分两种情况:假如当前模块是主模块(也就是调用其他模块的模块),那么此模块名字就是__main__,通过if判断这样就可以执行“__mian__:”后面的主函数内容;假如此模块是被import的,则此模块名字为文件名字(不加后面的.py),通过if判断这样就会跳过“__mian__:”后面的内容。
5.__slots__
为了达到限制的目的,Python允许在定义class的时候,定义一个特殊的__slots__变量,来限制该class实例能添加的属性。比如,只允许对Student实例添加name和age属性:
class Student(object):
__slots__ = ('name', 'age') # 用tuple定义允许绑定的属性名称
网友评论