面向对象

一.什么是面向对象

1.面向过程:指的是问题解决的步骤,按照步骤去解决,将问题简单化去处理

优点:复杂的简单化

缺点:流程固定扩展性差.改一处就要牵动全身

2.面向对象:一种编程的思维 OOP,是Object oriented Programing的简称,就是面向对象的英文缩写

将程序看做是一堆对象的集合,实现功能的方式就是对象之间交互来实现

二 类和对象

类与对象之间的关系
类包含了一系列相同特征和技能的对象
对象是属于某个类的实例

程序员在程序中相当于上帝 需要什么就创造什么
先有类 才能通过类来产生对象,要先确定对象具备什么特征和什么行为才能产生对象

面向对象的优缺点:
优点:
1.不用考虑繁琐的实现步骤,从一个操作工,变成了老板
2.扩展性高了,当需要一个新功能时,搞一个具备新功能的对象,命令它去完成任务
3.各个对象之间的耦合度低,当一个一个对象出现了问题,不会对其他对象产生影响
4.可维护性高

缺点:1.面向对象的复杂度比面向过程高
2.无法预知执行结果,就像lol的游戏过程,一定不能把过程写死,每个英雄的行为是不固定的
使用场景:需要较高的扩展性时,(直接与用户发生交互的程序例如,qq微信)
对于不需要扩展的程序而言,使用面向对象反而增加了复杂度

创建类和对象

class Person:       定义个类
# 用变量来描述特征
name = "李四"
sex = "man"
age = 20

obj = Person()   得到对象 通过调用类 ,也称之为实例化 或 创建对象

三.属性的访问顺序

查找顺序为 对象 ->  类

当创建一个类的时候 会产生名称空间,存储类中名称和值的绑定关系
当创建一个对象的时候 会产生名称空间,存储对象中名称和值的绑定关系
类还有另一个作用 就是 作为对象的模板,所有属于同一个类的对象,都具备类中的公共内容

四.初始化函数

作为一个人 一旦出生 性别必须要指定
带有__开头__结尾的函数 是一些特殊内置函数,会在某个时间点自动触发执行
class Person:
# 初始化函数名称是固定 该函数会在调用类是时自动执行,self参数必须有,表示要进行初始化的对象,系统会自动传值
def __init__(self,name,age):
print("执行了 __init__")
print(self)
self.name = name
self.age =age

init 函数用于初始化对象,它会在创建对象时,自动执行,并传入调用类时传递的参数,第一个参数表示要初始化的对象本身,
self(第一个)参数不需要手动传递
self表示对象自己 是一个形式参数,名字可以随便取,但是不建议修改

五 绑定方法

class Student:
school = "BeiJing"

def __init__(self,name,sex,age):
self.name = name
self.sex = sex
self.age = age

def learning(self):
print("正在学习..")

def sayHI(self):
print("hello my name is %s my age:%s my sex:%s" % (self.name,self.age,self.sex))

# 默认情况下 在类中定义的函数都是绑定方法,共同点是,都会讲对象作为第一个参数self
六.给类绑定方法
绑定方法分为两种 一种是绑定给对象的.另外一种是绑定给类的
class Student:
school = "beijing"

def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex




@classmethod
def print_school_name(cls): #输出类里面叫school的属性
  print(cls.school)
绑定给类的方法 使用一个装饰器叫classmethod,必须有一个参数,表示当前类.
def sayHello(self):
print(self.name,'说:你好') 绑定给对象

 Student.print_school_name()

Student.print_school()

对象绑定方法 可以使用对象来调用 也可以使用类名来调用

在对象调用时会自动传入对象自己

类调用时不会自动传参

类的绑定方法,对象和类都能调用,并且都会自动传入这个类

总结:类内定义的函数,类可以使用,但是类用的时候就是一个普通的参数,普通参数需要几个参数就要传几个.

  其实是绑定给对象用的绑定不同的对象就有不同的绑定方法.

  绑定方法的特殊之处在于,谁来调用,就会将谁当做第一个参数自动传入

一切皆对象:在python3中统一了类与类型的概念,类即类型

原文地址:https://www.cnblogs.com/fanbiyong/p/10115689.html