面向对象

面向对象编程思想

复制代码
面向对象的核心思想:   数据与功能的绑定

# 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属性存在修改,不存在新增
复制代码

 

posted @   橘子菌菌n  阅读(343)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示