python之__init__
Posted yuyafeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python之__init__相关的知识,希望对你有一定的参考价值。
__init__为Python中的构造函数
在对象实例化时,负责对对象的初始化,它并不算真正意义的构造函数,它做的事是在对象创建好之后初始化变量,真正创建实例的是__new__方法
class Foo: def __init__(self): pass obj = Foo() print(obj.__dict__) ‘‘‘ ‘‘‘
class Foo: def __init__(self, name, age): self.name = name self.age = age obj = Foo(‘yyf‘, 18) print(obj.__dict__) ‘‘‘ ‘name‘: ‘yyf‘, ‘age‘: 18 ‘‘‘
类加括号实例化对象的步骤
1, 创建一个该类的空对象 __new__
2, 实例化该空对象 __init__
3, 将实例化的空对象返回 return cls
重写__init__
1. 该方法是从type中继承来的,所以参数同type的init
2. 最终的工作(如果开辟空间,如果操作内存)还是要借助type
3. 再交给type最终完成工作之前,可以对垒的创建加以限制
class MyMetaClass(type): # 要重写init必须继承type def __init__(self, class_name, class_bases, class_addrs): print(class_name) # 类名 print(class_bases) # 继承的基类 print(class_addrs) # 名称空间
super().__init__(class_name, class_bases, class_addrs) # 最终还是要借助type class Foo(metaclass=MyMetaClass): def __init__(self): pass obj = Foo() # Foo = MyMetaClass(class_name, class_bases, class_addrs)
‘‘‘
Foo
()
‘__module__‘: ‘__main__‘, ‘__qualname__‘: ‘Foo‘, ‘__init__‘: <function Foo.__init__ at 0x032D8738>
‘‘‘
案例一
class MyMetaClass(type): def __init__(self, class_name, class_bases, class_addrs): print(class_name) if not class_name.istitle(): raise TypeError(‘第一个字母必须大写‘) super().__init__( class_name, class_bases, class_addrs) class foo(metaclass=MyMetaClass): def __init__(self): pass obj = foo() ‘‘‘ foo Traceback (most recent call last): File "D:/Python/02/myinit.py", line 48, in <module> class foo(metaclass=MyMetaClass): File "D:/Python/02/myinit.py", line 44, in __init__ raise TypeError(‘第一个字母必须大写‘) TypeError: 第一个字母必须大写 ‘‘‘
以上是关于python之__init__的主要内容,如果未能解决你的问题,请参考以下文章