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

面向对象

时间:2022-11-02 21:24:19浏览次数:45  
标签:__ name 对象 面向对象 dict Student print

面向对象

编程思想

1.面向过程编程
	面向对象过程就像我们之前写的代码,按照流程解决问题. 需要写出每一步的流程.
   eg:我想吃西红柿炒鸡蛋
   1.去菜市场
   2.去蔬菜摊买西红柿
   3.去买鸡蛋
   4.回家准备
   5.油盐下锅炒
   6.吃上了西红柿炒鸡蛋啊
---------------------------------------------
2.面向对象编程
	对象就是容器,数据与功能的结合体。给不同对象绑定特定的数据与功能
    eg: 想吃西红柿炒蛋
 可以把菜市场 , 人, 厨房 封成三个对象,每个对象有每个对象的功能。菜市场可以有 买鸡蛋和买西红柿的功能,人可以有想吃什么,和吃了什么,做什么吃功能。厨房就有厨房里的一切(油盐酱醋)。


"""两者没有优劣之分,结合实际需求选择编程"""

类与对象

对象: 数据与功能的结合体。
类: 多个对象相同的数据和功能的结合体
怎么理解呢?
eg: 现在有两个人,我们都拥有一些共同的地方,比如我们都有名字,性别,年龄,身高这些相似的地方。
那么这两个人我们可以定义成一个类(人类),而这两个人就是这个具体的对象,我们 提到人类都知道 人都有名字,年龄,身高这些属性。但你并不知道具体叫什么名字,年龄多大。他也有一些属于自己的属性
"""    一个人          对象(有着自己的属性)
	   一群人         类(人类)有着人都有的相同的属性"""
python中 必须先定义类才能产生对象

类与对象的创建

上面我们说了python中必须先定义类才能产生对象,其实也就是借助类来产生对象。
1.类的语法结构:
	class 类名:
        """注释"""
        对象公共的数据     # (统称类体代码)
        对象公共的功能     # (统称类体代码)
 	1.定义类必须要有关键字 class
 	2. 类名其实和变量名没有差别,但为了快速识别做区分建议首字母大写。
 	3. 数据其实就是  变量名 = 变量值
   		功能就是  函数
2.类的定义与调用
类在定义阶段就会执行类体代码,产生一个类的 名称空间
class Student:
    school_name = '我是人'

    def choice_coures(self):
        print('厕所功能')

# 查看名称空间方法
"双下__dict__"
print(Student.__dict__)
# {'__module__': '__main__', 'school_name': '我是人', 'choice_coures': <function Student.choice_coures at 0x000002BD070F7700>, '__dict__': <attribute '__dict__' of 'Student' objects>, '__weakref__': <attribute '__weakref__' of 'Student' objects>, '__doc__': None}
'我们可以查看到类名称空间里的所有名字与数据'
             
可以通过 . 句点符的方式来访问类里的数据与功能
print(Student.school_name)  # 我是人
print(Student.choice_coures) # <function Student.choice_coures at 0x000002BD070F7700>

类名加括号 就会产生对象,并且每多执行一次都会产生一个新的对象。(内存地址不同是一个新的对象)
obj1 = Student()  # <__main__.Student object at 0x000002001DEA5A60>
obj2 = Student()  #  <__main__.Student object at 0x000002001E2E0130>
可以用对象名+句点符 获取数据
print(obj1.school_name)  # 我是人
print(obj2.school_name)  # 我是人


可以通过类名.数据名的方式更改数据的值
Student.school_name = '我是狗'  
'修改school_name 的值'
print(obj1.school_name)  # 我是狗
print(obj2.school_name)  # 我是狗

"""数据和功能的别称: 属性名与方法"""

给对象添加独有的数据

class Student:
    school_name = '我是人'

    def choice_coures(self):
        print('厕所功能')
obj1 = Student()  # 产生一个对象
obj2 = Student()  # 再次执行产生一个新的对象

print(obj1.__dict__)  #  空的{}
print(obj2.__dict__)  #  空的{}
给每个对象 添加独有的 数据(属性)
obj1.__dict__['name'] = 'jason'
obj1.__dict__['age'] = 17
obj1.__dict__['hobby'] = 'raper'
print(obj1.__dict__)  # {'name': 'jason', 'age': 17, 'hobby': 'raper'}
"""类似于字典中不存在则新建数据,但是如果我们给多个对象添加独有的特征就需要反复的使用此代码,添加了代码重复率"""

"可以将此代码封装成函数,放进类里。"


class Student:
    school_name = '我是人'
    # 专门给学生添加独有数据的功能
    def init(obj, name, age, hobby):  
    # 使用init方法可以在产生类的时候自动触发
     obj.__dict__['name'] = name
     obj.__dict__['age'] = age
     obj.__dict__['hobby'] = hobby

    def choice_coures(self):
        print('厕所功能')

obj1 = Student()  # 产生对象
Student.init(obj1,'tank',20,'read')  # 给函数传参  
print(obj1.__dict__)  # {'name': 'tank', 'age': 20, 'hobby': 'read'}
"""此方法 因考虑到定的功能只能给特定的对象添加独有数据兼容性还不够强""" 
使用下列方法:

class Student:
    school_name = '我是人'

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

    def choice_coures(self):
        print('厕所功能')



obj1 = Student('tank', 20, 'read')
# 自动将对象传给函数的第一个参数self. == Student.init(obj1,'tank',20,'read')
print(obj1.__dict__)  # {'name': 'tank', 'age': 20, 'hobby': 'read'}
print(obj1.age)  #  也可以通过句点符获取数据  20
给不同的对象添加独有数据:
obj2 = Student('tony', 28, 'money')  
print(obj2.__dict__)  # {'name': 'tony', 'age': 28, 'hobby': 'money'}
print(obj2.age)  # 28

给对象添加独有的功能

class Student:
    school_name = '我是人'

    def __init__(self, name, age, hobby):
        self.name = name 
        self.age = age
        self.hobby = hobby

    # 即是对象的公共功能,也是对象的独有功能,谁来调谁就是主人公
    def choice_coures(self):
        print('厕所功能')


stu1 = Student('tank', 17, 'read')
在全局定义独有功能
def eat():
    print('吃饭')
stu1.eat = eat  # 给stu1 增加独有的功能,
print(stu1.__dict__) # {'name': 'tank', 'age': 17, 'hobby': 'read', 'eat': <function eat at 0x00000282192563A0>}
stu1.eat()  # 调用功能   吃饭
'因定义在全局就不是独有的 所以应该放在类里'
类里定义的功能 会自动将对象 当做这个功能的第一个参数传给功能 , 谁来调就传谁
# 展示
类去调需要传参
Student.choice_coures(1) # 厕所功能
对象去调  
"自动将对象当做第一参数传入,如果有多个形参,多了几个传几个"
stu1.choice_coures()  # 厕所功能

标签:__,name,对象,面向对象,dict,Student,print
From: https://www.cnblogs.com/LiaJi/p/16851661.html

相关文章

  • 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__获取类......
  • Python学习路程——面向对象
    Python学习路程——面向对象编程思想'''面对过程编程: 过程即流程,面向过程就是按照固定的流程解决问题 需要列举出每一步的流程,并且随着步骤的深入,问题的解决也越来越......