面向对象基础
Posted gaimo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象基础相关的知识,希望对你有一定的参考价值。
一、什么是面向过程?
核心是过程,过程指的是解决问题的步骤,即按部就班,先干什么再干什么....面向过程的设计好比一条流水线,是一种机械式的思维方式。
优点:复杂的问题流程化,逻辑清晰,从而简单化,分成固定步骤去实现
缺点:扩展性差,不便于维护和修改
使用场景:对扩展性要求较低的程序:一旦完成基本很少改变的场景,著名的例子有Linux內核,git,计算器等
记住:不是所有程序都要面向对象,得分析具体需求
二、什么是面向对象?
面向对象编程:Object Oriented Programming,简称OOP,是一种程序设计思想。
它是将对象作为程序的基本单元,将数据和处理的程序封装到对象中去
面向对象的例子:
1、把大象装进冰箱如何实现
2、要开一家公司
优点:扩展性强,灵活性,重用性(复用性)
缺点:程序的复杂程度提高了:无法准确的预知结果
使用场景:对扩展性要求较高的程序,通常是直接面向用户的,列如:微信 QQ 大型网游等
三、类与对象
1、什么是类?
类和对象是面向对象编程中最核心的两个概念
类就是类型,类别,种类;是一系列对象中相似特征与技能的结合体,比较抽象的概念,如人类是不具体的
2、对象是什么?
对象是特征与技能的结合体:
如:演员张一山,姓名和职业是他的特征,演戏是他的行为,按照这样的定义,生活中到处都是对象
在程序中:用变量来表示对象的特征,用函数来表示对象的技能
将这些变量和函数结合在一起,形成一个整体,就是对象,这是面向对象的精髓所在!
3、对象和类的关系:
类包含一系列对象,对象属于某个类,在生活中是先有对象再有类的
而在程序中是先有类才能有对象的,我们必须先告诉计算机这类的对象有什么特征有什么行为;
总结出一个结论:在使用面向对象编程的时候,第一步就是思考需要什么样的对象,对象具备什么样的特征和行为
从而根据这些信息总结出需要的类型
四、创建类和对象:
1、定义类的固定语法:
定义类通过class
关键字:class
后面紧接着是类名
class 类的名称: # 类的内容 描述属性和技能 # 描述属性用变量,描述行为用函数 # 类名称 书写规范,首先见名知意 名称是大驼峰体命名法 # 驼峰体是单词首字母大写,大驼峰体是第一个字母大写,小驼峰体是第一个字母小写
2、创建对象的语法:
class Person: pass #创建对象 p=Person()
3、属性的写法
属性可以写在类中,类中的属性就是对象公共的
如果类中和对象中存在同样的属性,先访问对象,如果没有再访问类
class Teacher: school="oldboy" # 公共属性 t1=Teacher() t1.name="JAMES" t1.age=20 # 定义了三个属性
4、属性的增删查改
增加属性: 对象变量名称.属性名称=属性值 t1.name=18 删除属性: del 对象的变量名称.属性名称 修改属性: 对象.属性=新的值 t1.name=18 t1.name=20 查看属性:访问的是对象的所有属性 print(对象.——dict——) # print(Person.__dict__) 访问对象的类信息 print(对象.__class__)
五、初始化方法:__init__
什么是初始化?
用于为对象的属性设置初始值的函数
class Student: def __init__ (self,name): print("init run") self.name = name # 等价于内置 学生的属性
__init__函数要求第一个参数必须是self,该参数表示需要初始化的对象本身,这样就可以将name属性绑定到对象上
def __init__(self,) self不能修改,且不能为空,必需传参
练习:创建一个类具备几个属性,通过初始化方法来给他设置属性?
class Dog: def__init__(self,kind,color,age): self.kind=kind self.kind=color self.age=age di=Dog("哈士奇",“黑白”,1.5) d2=Dog("泰迪",“棕色”,2) 注意:该函数不能有任何返回值/.... 只能是None 规定如此..(即不带有return)
小结:
- init函数用于为对象属性设置初始值
- 在创建对象时会自动调用
- 自动传入对象本身
六、 属性的查找顺序
如果类中和对象中存在同样的属性,先访问对象,如果没有再访问类
优先查找对象自己的名称空间,如果没有则在类中找,如果类中也没有则到父类中找,直到找到为止,如果父类中也没有则抛出异常
class Student: school = "Tsinghua" #数据属性
def say_hello(self):#函数属性
print("hello i am a student")
def __init__ (self,name): #初始化函数 self.name = name
属性查找顺序:对象->类->父类
七、对象的绑定关系:
默认情况下类中的方法都是对象绑定方法:
当使用对象调用该函数时会自动传入对象本身,作为第一个参数,当使用类名来调用时它就是一个普通的函数,有几个就的传几个参数
练习:写一个学生类,具备一个打招呼的技能 要能输出自己的名字信息
class Student: def __init__(self,name): self.name=name def say_hi(self): print("hello my name is %s" %self.name) stu1=Student("jsaon") stu1.say_hi() Student.say_hi(stu1) #相互之间的传参
结果: >>hello my name is jsaon >>hello my name is jsaon
1、类的绑定关系:
类绑定的方法用@classmethod 来装饰
什么时候绑定给对象:当函数逻辑需要访问对象中的数据时
什么时候绑定给类:当函数逻辑需要访问类中的数据时
class Student: school = "oldgirl" def __init__(self,name,age,gender): self.name = name self.age = age self.gender = gender # def study(self): # print(self) # 对象绑定方法 def say_hi(self): # print(self) print("hello i am a student! my name:%s" % self.name) stu1 = Student("jack",20,"male") stu2 = Student("rose",18,"female") stu1.say_hi() stu2.say_hi() 》》 hello i am a student! my name:jack hello i am a student! my name:rose
2、非绑定方法
或叫做静态方法,就是即不需访问类的数据,.也不需要访问对象的数据
语法:@staticmethod
不常用
class OldBoyStudent: school = "oldboy" def __init__(self,name): self.name = name @classmethod def show_school(cls): # print(self.school) print(cls) @staticmethod def print_hello(): print("hello world")
以上是关于面向对象基础的主要内容,如果未能解决你的问题,请参考以下文章