面向对象
Posted legend27
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象相关的知识,希望对你有一定的参考价值。
面向对像
1、面向过程编程
核心是"过程"二字,过程指的是解决问题的步骤,即先干什么再干什么
基于该思想编写程序就好比在编写一条流水线,是一种机械式的思维方式
优点:复杂的问题流程化、进而简单化
缺点:可扩展性差
James = [‘student of nick‘,‘160‘,‘180‘]
Python中一切皆对象
对象的概念: 就是特征和技能的结合体
面向*对象*编程: 定义出一个个鲜明独特的对象,然后通过对象之间的交互编程
优点: 扩展性非常强
缺点: 逻辑非常复杂
语法
# 类的声明: ‘‘‘ class 类名: # class定义类语法的关键字 pass ‘‘‘ # 对象的产生: 对象的实例化 ‘‘‘ 对象1 = 类名() 对象2 = 类名() 对象3 = 类名() ‘‘‘ # 类与对象都有自己独立的名称空间,每一个被实例化出来的对象,名称空间也是各自独立 # 所以类与对象都能额外添加 属性(变量) 和 方法(函数) # 重点:类一旦被加载(随着所属文件的加载就加载),就会进入类的内部执行类中的所有代码
类与对象
类:具有相同特征与行为事物集合体的抽象
对象:现实中,实际存在的各个事物,也就是抽象出的类的具体表现
定义类
class Student: pass
产生对象
stu = Student()
添加特征与行为
stu.name = ‘James‘ stu.get_age = lambda age: age
造类
# 造类 def f1(): # 函数定义阶段,只检测语法,不执行代码(牢记) # 1/0 school = ‘oldboy‘ addr = ‘shanghai‘ class OldBoyStudent: # 类的定义阶段,会运行代码(牢记) # 1 / 0 school = ‘oldboy‘ addr = ‘shanghai‘ def choose_course(self): # 1 / 0 print(‘is choosing course‘) oldboystudent_dict = OldBoyStudent.__dict__ # 双下划线开头的方法会在某种情况下自动触发 print(oldboystudent_dict[‘school‘]) oldboystudent_dict[‘choose_course‘](1111)
造对象(实例化对象)
stu1 = OldBoyStudent() print(1, stu1.school) 1,stu1.choose_course() stu2 = OldBoyStudent() print(2,stu2.school) stu3 = OldBoyStudent() print(3,stu3.school)
- 定制对象独有的特征
print( OldBoyStudent.__dict__) # ‘__module__‘: ‘__main__‘, ‘school‘: ‘oldboy‘, ‘addr‘: ‘shanghai‘, ‘choose_course‘: <function OldBoyStudent.choose_course at 0x00000288C04389D8>, ‘__dict__‘: <attribute ‘__dict__‘ of ‘OldBoyStudent‘ objects>, ‘__weakref__‘: <attribute ‘__weakref__‘ of ‘OldBoyStudent‘ objects>, ‘__doc__‘: None print(‘stu1‘, stu1.__dict__) # stu1 stu1.__dict__[‘id‘] = 222222 stu1.id = 222222 print(stu1.__dict__) print(stu1.id) print(OldBoyStudent.__dict__) print(‘stu2‘, stu2.__dict__) # stu2 stu2.__dict__[‘id‘] = 666666 stu2.id = 666666 print(stu2.id)
class People: # 类自带(不同在外界额外添加)的属性与方法 identify = ‘人类‘ def sleep(self): print(‘睡觉‘) p1 = People() p2 = People() p1.identify = ‘新人类‘ print(p1.identify) # 访问自己的 p1.__dict__.clear() # 删除自己的后 print(p1.identify) # 访问类的 print(p2.identify) # p2没有自己的,访问类的 # 重点:属性的访问顺序:优先加载自身的名字,如果没有再考虑类的
数据类型
int/float/str/list/tuple/dict/set/func/class
class Foo: pass f1 = Foo() print(type(f1)) lis = [1,2,3,4] # lis = list([1,2,3,4]) print(type(lis)) lis.append(5) s = str(‘str‘)
以上是关于面向对象的主要内容,如果未能解决你的问题,请参考以下文章