首页 > 其他分享 >面向对象与类

面向对象与类

时间:2022-11-02 21:36:28浏览次数:50  
标签:__ stu1 name age 面向对象 dict Student

面向对象与类

何为面向对象

面向对象,按照字面意思就是根据对象来进行编程,实际上面向对象就是一种思维方式的转变
按照这种编程思想编程大致可分为两类,一种是面向过程编程,一种就是面向对象编程
面向过程编程
    就是按照事物的发展顺序一步一步来,并且随着事物的发展问题的解决也会变得越来越简单
    我们到目前为止所学习使用的几乎都是面向过程编程
面向对象编程
    首先面向对象在编程中就是数据与功能的绑定,也就是功能只能给特定的数据使用
    其次对象在python中可以看成是容器,用于存放数据与功能,也就是对象就是数据与功能的结合体
    ps:python中一切皆对象
    

面向对象之类与对象

面向对象并不是一门新的技术,但是为了使用方便和很好的区分开,针对面向对象设计了新的语法格式
在python中要产生对象就必须要借助类

类的语法结构
    class 类名(通常首字母大写):
        对象公共的数据
        对象公共的功能
    1.class 是定义类的关键字
    2.类名的命名与变量名几乎一致,但是为了区分开类名与变量名所以一般推荐类名首字母大写
    3.数据就是变量名与数据值的绑定,功能就是函数
类的定义与调用
    类在定义阶段就会执行类体代码,但这是属于类的局部名称空间,外界无法直接调用,如果需要访问数据或功能,那么可以统一采用句点符
    
class Student:
    school_name = '老男孩'

    def choice_course(self):
        print('选择课程')

# 查看名称空间
print(Student.__dict__)
# {'__module__': '__main__', 'school_name': '老男孩','choice_course': <function Student.choice_course at 0x000001C2978994C0>, '__dict__': <attribute '__dict__' of 'Student' objects>, '__weakref__': <attribute '__weakref__' of 'Student' objects>, '__doc__': None}

# 访问数据或功能
print(Student.school_name)  # 老男孩
print(Student.choice_course)  # <function Student.choice_course at 0x00000195845294C0>
按照名称空间我们可以使用Student.__dict__.get()来访问数据或功能,但是这样太麻烦了,所以在面向对象中统一采用句点符来访问数据或功能

# 类的调用即产生对象
类名加括号会产生一个对象并且每执行一次都会产生一个新的对象(生孩子???)
stu1  = Student()  # 生了老大
print(stu1.__dict__)  # {} 老大自己个是个穷光蛋,毛都没有
print(stu1.school_name)  # 老男孩  还好父母给帮忙
Student.school_name = '老小孩'  # 类里面的数据值可以直接修改
print(stu1.school_name)  # 老小孩  

对象独有的数据和功能

除却类里面的公共数据和功能外,只能对象自己访问的数据(孩子长大了有家产了!!!)

class Student:
    school_name = '老男孩'

    def choice_course(self):
        print('选择课程')
        
stu1 = Student()
stu2 = Student()
# 给每个对象添加独有的数据
# 1.先查看一下对象的名称空间
print(stu1.__dict__)  # {} 是一个空字典
# 2.给对象添加数据也就是往名称空间中添加数据》》往字典中添加键值对
stu1.__dict__['name'] = 'zyg'
stu1.__dict__['age'] = '18'
print(stu1.__dict__)  # {'name': 'zyg', 'age': '18'}
# 3.访问数据就可以直接使用句点符
print(stu1.name)  # zyg

# 添加数据太麻烦了,优化一下吧,弄成函数
def init(stu, name, age):
    stu.__dict__['name'] = name
    stu.__dict__['age'] = age

init(stu1, 'zyg', 18)
print(stu1.__dict__)  # {'name': 'zyg', 'age': 18}

# 新问题又来了,init这个函数谁来了都能用,但是这是只给学生用的》》把函数放到类里面
class Student:
    school_name = '老男孩'

    def init(stu, name, age):
        stu.__dict__['name'] = name
        stu.__dict__['age'] = age

    def choice_course(self):
        print('选择课程')


stu1 = Student()
stu2 = Student()
Student.init(stu1, 'zyg', 18)
print(stu1.__dict__)  # {'name': 'zyg', 'age': 18}

# 能不能把Student.init(stu1, 'zyg', 18)这一步去掉?
class Student:
    school_name = '老男孩'

    def __init__(stu, name, age):
        stu.__dict__['name'] = name
        stu.__dict__['age'] = age

    def choice_course(self):
        print('选择课程')


stu1 = Student('laj', 3)
print(stu1.__dict__)  # {'name': 'laj', 'age': 3}

# 函数再升级
class Student:
    school_name = '老男孩'

    def __init__(stu, name, age):
        stu.name = name  # stu.__dict__['name'] = name
        stu.age = age

    def choice_course(self):
        print('选择课程')


stu1 = Student('laj', 3)
print(stu1.__dict__)  # {'name': 'laj', 'age': 3}

这是对象独有数据的添加,那么对象独有的功能呢?
严格意义上来说对象没有自己独有的功能,它所使用的功能是定义在类里面的公共函数,只是类有一个特征:功能是公共的,结果是独有的(对象在使用功能时会将自己当做第一个参数传入)
class Student:
    school_name = '老男孩'

    def __init__(stu, name, age):
        stu.name = name  # stu.__dict__['name'] = name
        stu.age = age
 
    def choice_course(self):
        print('选择课程')

Student.choice_course(123)  # 选择课程
stu1.choice_course()  # 选择课程

标签:__,stu1,name,age,面向对象,dict,Student
From: https://www.cnblogs.com/zyg111/p/16852521.html

相关文章

  • 面向对象
    面向对象编程思想1.面向过程编程 面向对象过程就像我们之前写的代码,按照流程解决问题.需要写出每一步的流程.eg:我想吃西红柿炒鸡蛋1.去菜市场2.去蔬菜摊......
  • 11月2日内容总结——面向对象概念、类和对象的部分功能讲解
    目录一、面向对象概念引入(人狗大战)人狗大战简介推导步骤1:代码定义出人和狗推导步骤2:将产生人和狗的字典封装成函数并封装人和狗的攻击函数推导步骤3:人和狗的攻击混乱二......
  • 面向对象
    一、面向对象之人狗大战  编写代码简单的实现人打狗、狗咬人的小游戏推导步骤1:代码定义出人和狗person1={'name':'jason','age':18,'gender':......
  • 面向对象 类
    今日内容人狗大战:编写代码简单的实现人打狗狗咬人的小游戏推导步骤1:代码定义出人和狗person1{'name':'joyce','age':23,'attack_val':666,'life_val':100}pers......
  • 面向对象基础、对象的属性
    1.面向对象前戏之人狗大战#编写代码简单的实现人打狗狗咬人的小游戏(剧情需要)"""推导步骤1:代码定义出人和狗"""person1={'name':'jason','age':18,......
  • 面向对象
    Day27面向对象内容概要面向对象编程思想面向对象类与对象面向对象代码实操对象的独有数据对象独有的方法详细内容面向对象编程思想面向过程编程与面向对象编......
  • 面向对象基本知识了解
    今日内容详细面向对象核心思路前戏之人狗大战编写代码简单的实现人打狗狗咬人的小游戏(剧情需要)"""推导步骤1:代码定义出人和狗"""person1={ 'name':'jason', ......
  • python面向对象推导流程
    举例:猫狗大战#1.例如我们要编写一个猫狗对战小游戏#首先我们要定义一个猫,和一只狗cat1={'name':'小白猫','type':'宠物猫','attack_val':20,......
  • python基础入门之面向对象
    python基础入门之面向对象面向对象前戏之人狗大战"""编写代码简单的实现人打狗,狗咬人的小游戏(剧情需要,人与狗是好朋友)"""#推导步骤1:代码定义出人和狗person1={'......
  • 面向对象
    目录面向对象前戏使用字典使用函数创建攻击函数封装攻击函数和字典编程思想面向对象之类与对象python中类和对象类的语法结构类的定义阶段查看类的名称空间__dict__获取类......