面向对象编程思想
面向对象的核心思想: 数据与功能的绑定
# 1.面对过程编程 按照固定的流程解决问题。 # 2.面对对象编程 创造出一个个对象,至于结果什么的与我们无关 (python中一切皆对象):对象是一个容器
ps:以上两种方法无优劣之分,通常是相辅相成的
面向对象之类与对象
对象: 数据与功能的结合体 核心是对象 类: 多个数据相同数据和功能的结合体 类的作用是为了节省代码 """ 一个人是一个对象,一群人就可以看作人类 """ 程序中要产生对象需要先定义出类
类与对象的创建
python中一定要有类才能借助类产生对象 # 类的语法结构 class 类名: '''代码注释''' 对象公共的数据 对象公共的功能 # 1.class是定义类的关键字 # 2.类名命名时首字母要大写 # 3.数据是变量名与数据值的绑定 # 4.功能(方法)其实就是函数 # 类的定义和调用 类在调用阶段就会执行类体内代码吗,但是属于类的局部名称空间。外界无法调用 # 例如:我们现在要写一个清华大学学生选课系统 class Student: # 对象公共的数据 school_name = '清华大学' # 对象公共的功能 def choice_course(self): print('学生选课功能') print(Student.__dict__) # 拿到的是整个名称空间里的所有东西,组织成列表形式 print(Student.__dict__.get('school_name')) # 拿到了Student类名称空间中的school_name print(Student.__dict__.get('choice_course')) # 拿到了Student类名称空间中的choice_course功能 # 面向对象中,类和对象访问数据或者功能,可以统一采用句点符 print(Student.school_name) print(Student.choice_course) """调用类就会产生对象""" # 类名加括号就会产生对象,每执行一次都会产生一个全新的对象 obj1 = Student() # 内存地址都不相同 obj2 = Student() # 变量名obj接收类名加括号后的返回值 obj3 = Student() # 加括号调用的对象名称空间没有东西 print(obj1.__dict__) # 可以通过类名点的方式修改,新增数据值 Student.school_name = '北京大学' Student.age = 13 print(obj1.school_name) print(obj1.age) """数据(属性名)和功能(方法)可以统称为属性"""
对象独有的数据和功能
独有的数据:
class Student: # 对象公共的数据 school_name = '清华大学' # 对象公共的功能 def choice_course(self): print('学生选课功能') # 对象独有的数据 obj1 = Student() obj2 = Student() # 1.每个对象都手动添加数据 obj1.__dict__['name'] = 'tom' # obj1添加一个名字tom obj2.__dict__['name'] = 'jerry' # obj2添加一个名字jerry print(obj1.__dict__) print(obj1.name) print(obj2.__dict__) print(obj2.name) # 2.将添加对象独有的数据代码封装成函数 def init(obj,name): obj.__dict__['name'] = name stu1 = Student() stu2 = Student() init(stu1, 'tom') init(stu2, 'jerry') print(stu1.__dict__) print(stu2.__dict__) # 3.给学生student对象添加独有数据的函数,只有学生对象才有资格调用,传入参数变量名修改 class Student: school_name = '清华大学' def init(self,name): self.__dict__['name'] = name def choice_course(self): print('学生选课功能') stu1 = Student() Student.init(stu1, 'tom') stu2 = Student() Student.init(stu2, 'jerry') # 4.init方法变形 class Student: school_name = '清华大学' def __init__(self,name): self.name = name def choice_course(self): print('学生选课功能') stu1 = Student('tom') print(stu1.__dict__) print(stu1.name)
独有的功能:
class Student: school_name = '清华大学' def __init__(self, name): self.name = name def choice_course(self): print(f'学生{self.name}选课功能') stu1 = Student('tom') # 1.直接定义在全局的功能,(该函数不是Student对象独有的) def eat(): print('觅食') stu1.eat = eat print(stu1.__dict__) stu1.eat() # 调用eat方法 # 2.只能将函数放在类中,但类中的函数又不是对象公共的 """定义在类里面的功能,默认就是绑定给对象使用的,谁调用该功能谁就是主人""" Student.choice_course(stu1) # 类调用需要自己传入参数 stu1.choice_course() # 对象调用会自动将对象作为第一个参数传入 # 修改,新增对象内的数据值 stu1.name = 'hanser' # 点的name属性存在修改,不存在新增
标签:__,stu1,name,对象,面向对象,Student,print From: https://www.cnblogs.com/juzijunjun/p/16851506.html