#一切皆对象,类也是对象,可以把类当成普通对象来使用
#动态语言:是指程序运行时可以改变其结构 静态语言:静态类型语言的类型判断实在运行前判断(如编译阶段)
class type()
"""
生成类的类,系统的元类
"""
def __init__(cls,what,bases=None,dict=None)
"""
type(object_or_name, bases, dict)
type(object) -> the object's type
type(name, bases, dict) -> a new type
再类对象初始化的时候会自动传入参数
"""
exec(code,globals,locals) #执行字符串式的python代码
eval(code) #用于执行简单的表达式,不能有特殊语法
#就算__init__中什么都不写,这个类对象其实已经创建完成了,于普通类不同
class A_Metaclass(type):
"""
自定义元类
type:继承元类type
"""
def __init__()
type.__init__(self,c_name,bases,c_dict)
if not self.__doc__ :
raise BaseException
def __new__(cls,*args,**kwargs):
"""
cls:A_Metaclass,表示元类自己
该方法会在实例化对象时自动调用并且在init之前调用
在元类其作用是用于创建新的类对象的
"""
pass
class Student(metaclass = A_Metaclass)
pass
------------------------------------------
异常:
"""
异常是错误发生的信号,一但程序出错就会产生一个异常,如果该异常没有被应用程序处理,那么该异常就会抛出来,程序的执行也随之终止
1.语法检测异常
在语法检测阶段出现的异常
2.运行时异常
已经通过了语法检测,开始执行代码,执行过程中发生异常,称之为运行时异常
异常的三部分:
Traceback 异常追踪信息 用于展示错误发生的具体位置,以及调用的过程
其中包含了错误发的模块,错误发生的模块 文件路径 行号 函数名称 具体的代码
错误类型,详细信息
"""
'''
断言assert
断言 其实可以理解为断定的意思
类似于if else 的判断,通过则执行代码,不通过则抛出异常
'''
assert path.endswith("mp3")
print("播放%s" % path)
'''
try后面可以跟多个except,多个异常类可以是不同异常类型
'''
try:
name
except Exception as e:
print(e)
'''
raise用于主动抛出异常,可以主动编写一个异常类,继承Exception
'''
class FileTypeException(Exception):
pass
raise FileTypeException("仅能播放mp3格式.....")
单例模式:
""""
一种设计模式,单个实例的意思
当你需要让你的类仅有一个实例时,那就使用单例模式
"""
class SingletonMetaClass(type):
def __init__(self,c_name,bases,c_dict):
self.c_name = c_name
self.bases = bases
self.c_dict = c_dict
self.obj = None
def __call__(self,*args,**kwargs):
if self.obj:
return self.obj
obj = type.__call__(self,*args,**kwargs)
self.obj = obj
return obj
class Person:
def __init__():
pass
class Teacher:
def __init__():
pass