Python的面向对象
面向对象
1、什么是面向对象
面向对象,相对于面向过程而言
编程语言的发展历史:
一代语言:二进制
二代语言:面向机器的语言(汇编)
三代语言:C语言、C++、C##、java、PHP、python、ruby…
C语言:面向过程思维在编程
细化问题,调用函数解决问题
世界观:当语言要解决庞大的问题是,面向过程暴露出它的不足之处。
总结:分类处理,创建世界的过程
2、类与对象
创建类,得到对象
什么是类:类就是类别,进行分析得到的一些类别,关键字class来定义
什么对象:类的一个实例(实实在在的案例)
类是一个抽象概念,是一个事物的总称,而对象就是实例,一个真正存在的事物
类是模板,对象时事物
"""
定义一个用户类,类名称叫做User
"""
class User(object):
# 重写__init__ 初始化方法,该方法用来初始化属性,魔法方法,在构建对象的时候,会自动触发
# 因为在构建对象的时候,才能确定对象的属性值,我们就可以将这些值传递
def __init__(self, name, age, gender, tell):
# print("构建对象的时候触发了")
# # 属性,是类的属性
# self.name 是User类的属性
self.name = name
self.age = age
self.gender = gender
self.tel = tell
def study(self):
print("我爱学习")
def __str__(self):
"""这个魔法方法,在输出对象时调用"""
return "[name = " + self.name + ",age = " + str(self.age) + ", gender = " + self.gender + ", tel = " + self.tel + "]"
if __name__ == "__main__":
# 创建对象,创建了一个User的对象
# 传递属性的值,用来初始化属性
u = User("zhangsan", "18", "nan", "110")
print(u)
3、类的定义
类中的变量和方法都叫做类成员
python使用class关键字来定义
类名称命名规范:遵循大驼峰法
class Stuednt(object):
属性
静态的特征 | init()初始化这些属性 (这些属性又叫做类成员属性) |
---|---|
动态的行为动作 | 使用函数模拟方法( method) |
4、对象的创建
5、类的属性和方法
init 魔法的方法的使用
str
调用属性或者方法
- 对象.属性名称
- 对象.方法([参数列表])
案例的讲解
6、面向对象的三大特征
封装
继承
多态
封装
什么是封装?
我不知道这个东西底层是什么,但是我会用它
面向对象的封装是特指:
- 1、将属性和方法 封装到一个类或者多个类中,需要使用的时候,通过对象调用对应的属性或方法
将类的属性封装(隐藏)起来,提供公开的方法(getter和setter)来访问的行为!!(封装)
-
2、将属性私有化(只有内部能访问,外界无法访问)
提供公开的方法(getter和setter)来访问的行为!!(封装)
-
格式:__属性名称
注意:这种私有不允许外界访问或者修改
第一种私有化的方式
python,如果要私有化一个属性,在属性前面加上两个下划线 username —> __username
class User(object):
def _init__(self, username, age, gender, email):
self.__username = username
self.__age = ageself.__gender = genderself.__email = email
def get_name(self):
return self.__username
def set_name(self.username) :
self._username = username
if __name__ == '__main__':
ul = User("张三", 18, "女", "110@qq.com")
第二种封装的写法
property函数
第三种封装的写法
使用装饰器property完成 get方法的装饰(注意:函数名称建议就是私有前的属性名称)
在set方法上@xxxx.setter
第三种写法IU是第二种方式的变种写法
总结:
在定义类的时候,一定要封装类,也就是一定要私有化属性,提供公开的set\get方法去访问。
继承
继承:类与类之间也存在一种继承的关系
class son (RichMan) : #表示son继承RichMan,RichMan类是son类的父类(超类\基类)
#Son类是RichMan的子类
注意:继承父类的时候,并不是,所有的属性和方法都会继承!!!
而是只能继承公开的方法和属性
除了私有属性和方法,都能被继承
继承本质就是为实现代码的复用!! ! !
方法重写\覆盖(override )
在继承基础上,如果子类方法父类的方法不能满足自己使用的时候,那么就重写这个方法
注意:覆盖时:方法名称和参数必须一模一样
class fulei(object):
pass
class son(fulei):
pass
面试题:
python有函数重载吗,有方法重写。
结论:python并没有函数重载!!!
重载(overload):函数重载指的是,函数名称相同,而参数的个数或者类型不同,这样的一些函数构成函数重载
public static int add(int x, int y){
return x + y
}
public static float add(int x, float y){
return x + y
}
public static float add(float x, int y){
return x + y
}
add (2.3f,4.5f)
super关键字和python多继承
python支持多继承
class son (RichMan,object, XXXXx,XXX)
python运行一个类有多个父类
super关键字
super 超 是一个指针,默认指向父类
super().working()
写在子类中,super调用的是父类中的wordking方法,super后面的括号意思是构造对象
在子类中调用父类的方法或者属性
多态
多态:指的就是对象的多种状态。多态是在继承的基础上而言。
父类引用指向子类实例的现象,把这种现象叫做多态
List ls = new ArrayList ( ); #面向对象的语言中,运行父类对象指向子类实例
注意:在弱数据类型中,天生支持多态
面试题:
1、你对面向对象的理解
2、面向对象的特征是什么
3、对封装的理解?
封装,类本身就是一个封装,封装了属性和方法。方法也是封装,对一些业务逻辑的封装。私有也是封装,将一些方法和属性私有化,对外提供可访问的接口。
4、对继承的理解
将共性的内容放在父类中,子类只需要关注自己特有的内容,共性的继承过来就行了。这样简化开发,符合逻辑习惯,利于扩展。
5、多态的理解
多态,一个对象在不同的情况下显示不同的形态。在python中因为是弱类型语言,对类型没有限定,所有 python中不完全支持多态,但是多态的思想呢,python也是能体现的。