Java - 强制面向对象 类
Python - 既支持面向对象,也支持面向过程
1、类、对象
类是对某一类具有共同特点的事物的抽象,是在概念上的一个定义
比如:人、学生、汽车。但是单独说这三个概念的时候,不代表任何一个具体的个体
类的具体实例叫做 【对象】 【类的实例】 【实例化一个类】
学生是类,张三是一个具体的学生就是 学生类的实例(Instance),也叫学生对象
2、变量和方法
特征、属性——变量
行为、功能——方法(函数)
举例:人、汽车
*成员变量、成员方法:
每个实例(对象、成员)间独立的,与其他成员不同的、不相关的
变量:姓名、年龄、身高体重
方法:吃饭、学习、唱歌
*类变量、类方法:
所有实例共用的、相同的,或只跟类有关而跟具体实例无关的
变量:学校、学生总数、放学时间
方法:上学、放学
3、类的定义
class 类名(父类):
类实体
*类名:每个单词的首字母大写
**属性的定义:
*成员变量
构造函数(初始化函数) __init__(self)
作用:python在创建类的实例的时候,会调用这个类的__init__()方法
初始化数据
self:创建的实例自身(存储当前对象的地址)
所有的成员方法第一个参数默认是self,但是调用的时候不需要传值
成员变量--属于实例的变量
每次实例化就创建,实例结束就销毁
*一般是在__init__方法中通过self完成 定义
*类内部:通过*self访问*,类外部:通过实例访问
*类的实例化
类名(),括号内根据类的构造方法规定的参数传参(self除外)
*类变量
属于类的变量,
*在类起始处统一定义
*类内部:通过*类名*或*cls关键字*来访问;类外部:通过类名或实例来访问
每次实例化新对象时,拷贝一个副本给对象
通过实例的修改只对当前实例生效,通过类名的修改才能改变整个类所有对象的值
*成员(实例)方法
定义:必须带有参数self
内部:可以访问成员变量、类变量(self或类名)、成员方法(self)、类方法(self或类名)
通过self调用
外部:通过类实例调用
*类方法
定义:必须带有@classmethod、和cls参数
内部:可以访问类变量、类方法
外部:通过类实例或类名调用
*静态方法
定义:必须带有@staticmethod
内部:如果静态方法调用类方法或属性时,只能直接类名.属性名或类名.方法名
外部:通过类实例或类名调用
4、私有变量:__变量名
python使用的是名字重整技术,改变了私有变量的值:_类名__变量名
私有方法:
__xx()
专属变量
__xx__
特殊方法:
__xx__() 代表一定的协议,相当于Java中的接口方法
* __str__()与__repr__()
__str__() --让class作用于print()函数
(了解即可)__repr__() --返回程序开发者看到的字符串
* __len__() --让class作用于len()函数
__iter__() --让class具有可迭代的属性,返回值必须是对象自己
next():每一次for循环都调用该方法
__getitem__() --让class作用于索引方式
__getattr__()
当调用不存在的属性时,会试图调用此方法,来尝试获得属性
5、封装
变量私有化 + 提供getter和setter方法
6、继承和多态
多态
1.当我们需要传入一个对象时,我们可以不传入具体的类型,而传入一个抽象的概念---父类对象
2.这样,在程序实际运行时,可以动态绑定传入的类型
3.因为都有共同的父类,所以一定有共同的方法。使用时,内部使用时,调用共有的方法就可以
isinstance(instance, class)方法
多重继承
(class1, class2, class3) --class1优先
网友评论