类(class):
类的名字约定以大写字母开头。
self相当于C++的 this指针
python中的魔力方法总是有双下划线
__init__(self, param1, param2...) 相当于C++中的构造函数
默认的__init__(self)只有一个self参数
默认情况下python中的成员和方法都是公有的
在python中定义私有变量只需要在变量名或函数名前加上"__"两个下划线,那么这个函数或变量就会为私有的了
其实在python中"__"开头的被python改了名字,改成了“_类名__变量名”
继承:
在新建类的时候在类的名字后面有括号写上父类的名字
例如: class son_class(father_class):
注意:如果子类中定义与父类定义同名的方法或属性,则会自动覆盖父类对应的方法或属性
继承子类如果重写了__init__()方法只需要调用父类的Father.__init__(self)之后就可以继承父类的__init__(self)
方法或者使用super()函数,只需要在子类的__init__(self)中加上super().__init__()就好了这里不用给定基类的名字会自动找出并传入参数
多重继承:
只需要在后面的括号中一次写入多个父类,并用逗号隔开
组合:
组合就是把类的实例化放进了一个新的类里面
如果属性的名字与方法的名字相同,属性会覆盖方法
类名X或实例化对象xx通过X.__dict__或者xx.__dict__可以查看类的属性
关于类的一些BIF
issubclass(class, classinfo):
如果class是classinfo的子类,就返回True否则就返回False,同时,类被认为是自身的子类
classinfo可以是包含很多类的元组,class是其中的一个类是的子类则返回True
isinstance(object, classinfo):
检查对象object是否是classinfo的实例化
hasattr(object, name):
检查实例化对象object是否有name属性,那么一定要是一个带引号的字符串
getattr(object, name[, default]):
跟hasattr()类似,可选参数default是object没有name属性时输出default的内容,如果存在就返回name属性的内容
setattr(object, name, value):
可以设定实例化对象object的属性name的值是value,如果name属性不存在就新建属性name并设定值是value
delattr(object, name):
删除实例化对象object的属性name,如果name不存在就抛出AttributeError
property(fget=None, fset=None, fdel=None, doc=None):
通过传入已经写好的方法来修改属性
构造和析构:
__init__(self)必须返回一个None
__new__(cls[,...])才是实例化时调用的第一个方法,但是一般不会去重写__new__()方法
__del__(self) 销毁对象类似C++的析构函数,但是是对象的所有引用为0是才会被调用
工厂函数就是类对象
类的名字约定以大写字母开头。
self相当于C++的 this指针
python中的魔力方法总是有双下划线
__init__(self, param1, param2...) 相当于C++中的构造函数
默认的__init__(self)只有一个self参数
默认情况下python中的成员和方法都是公有的
在python中定义私有变量只需要在变量名或函数名前加上"__"两个下划线,那么这个函数或变量就会为私有的了
其实在python中"__"开头的被python改了名字,改成了“_类名__变量名”
继承:
在新建类的时候在类的名字后面有括号写上父类的名字
例如: class son_class(father_class):
注意:如果子类中定义与父类定义同名的方法或属性,则会自动覆盖父类对应的方法或属性
继承子类如果重写了__init__()方法只需要调用父类的Father.__init__(self)之后就可以继承父类的__init__(self)
方法或者使用super()函数,只需要在子类的__init__(self)中加上super().__init__()就好了这里不用给定基类的名字会自动找出并传入参数
多重继承:
只需要在后面的括号中一次写入多个父类,并用逗号隔开
组合:
组合就是把类的实例化放进了一个新的类里面
如果属性的名字与方法的名字相同,属性会覆盖方法
类名X或实例化对象xx通过X.__dict__或者xx.__dict__可以查看类的属性
关于类的一些BIF
issubclass(class, classinfo):
如果class是classinfo的子类,就返回True否则就返回False,同时,类被认为是自身的子类
classinfo可以是包含很多类的元组,class是其中的一个类是的子类则返回True
isinstance(object, classinfo):
检查对象object是否是classinfo的实例化
hasattr(object, name):
检查实例化对象object是否有name属性,那么一定要是一个带引号的字符串
getattr(object, name[, default]):
跟hasattr()类似,可选参数default是object没有name属性时输出default的内容,如果存在就返回name属性的内容
setattr(object, name, value):
可以设定实例化对象object的属性name的值是value,如果name属性不存在就新建属性name并设定值是value
delattr(object, name):
删除实例化对象object的属性name,如果name不存在就抛出AttributeError
property(fget=None, fset=None, fdel=None, doc=None):
通过传入已经写好的方法来修改属性
构造和析构:
__init__(self)必须返回一个None
__new__(cls[,...])才是实例化时调用的第一个方法,但是一般不会去重写__new__()方法
__del__(self) 销毁对象类似C++的析构函数,但是是对象的所有引用为0是才会被调用
工厂函数就是类对象