面向对象之类与对象

一、类与对象的概念

  类即是类别、种类的意思,是面向对象最重要的概念,在上一篇文章里我已经论述了,对象就是特征和技能的结合体,而类是一系列对象相似的特征与技能的结合体。现实世界中,是先有对象才有类的,而在我们面向对象编程的过程中却是不同的,我们必须先定义类,才能用类去产生(实例化)对象,这一点是最主要的区别。

 

二、定义类

  1、现实世界中,先有对象,再有类。

对象1 
    特征
        职业:学生
        姓名:王二
        性别:男
        年龄:22
    技能
        学习
        打游戏
对象2
    特征 
        职业:学生
        姓名:张三
        性别:男
        年龄:20
    技能
        学习
        打游戏
        看书
对象3 
    特征 
        职业:学生
        姓名:婉婉
        性别:女
        年龄:18
    技能
        学习
        打游戏
        看书
现实中的类:
    特征:
        职业:学生
    技能:
        学习
        打游戏
        看书
View Code

  2、在面向对象编程的程序中,必须先定义类,才能实例化产生对象。

# 先有类
class School_learn:
    job = 'student'
    def study(self):
        print('study hard!')
    def play_game(self):
        print('play games as little as you can')
    def read(self):
        print('read books more and more')

# 再调用类产生对象
student1 = School_learn() # 通过类的实例化产生对象,等同于School_learn(student1),自动传参
student2 = School_learn()
student3 = School_learn()
print(student1) # <__main__.School_learn object at 0x000002B70F8D7588> 对象
print(student2)
print(student3)

  注意:<1>在Python程序中类用class关键字定义,类名首字母习惯一般大写,在程序中,特征用变量标识,技能用函数标识,所以在类中最常见的操作就是变量和函数的定义。

     <2>类中定义的代码,在类定义阶段便会执行,因而会产生新的名称空间,用来存放类的变量名与函数名,可以通过School_learn.__dict__查看。

     <3>类中定义的名字,都是类的属性,用 类名+“ .”+ 属性名可以访问属性。

     <4>对于类,有两种分类,一种是经典类,另一个是新式类,经典类可以通过该字典操作类名称空间的名字,但新式类有限制,这个暂时我们不讨论,后面会再区分。

 

三、类的使用

  1、查看类的名称空间和类属性的增删改查

#!/usr/bin/env python3
#-*- coding:utf-8 -*-

class School_student:
    job = 'student' # 数据属性
    def student(self):
        print('student hard')
    def games(self): # 函数属性
        print('playing game')
    def read(self): # 函数属性
        print('read books')
    print('hello') # hello

# 查看类的名称空间
print(School_student.__dict__)
print(School_student.__dict__['job']) # student
print(School_student.__dict__['games']) # <function School_student.games at 0x000001CA24978B70>

# 类的查看
print(School_student.job) # student
print(School_student.games) # <function School_student.games at 0x0000020072358B70>

# 类属性增加
School_student.county = 'China' # 默认添加到最后以键值对  'county': 'China'
print(School_student.__dict__)

# 类属性的更改
School_student.job = 'STUDENT'
print(School_student.job)  # STUDENT

# 类属性的删除
del School_student.county # 删除键值对  'county': 'China'
print(School_student.__dict__)

  2、调用类,即实例化,得到对象

student1 = School_learn()
student2= School_learn()
student3 = School_learn()

  3、__init__方法

class School_learn:
    job = 'student'
    def __init__(self,name,age,sex):
        '''
        # 添加对象独有的属性
         #    self:student1
        :param name: '小明'
        :param age: 20
        :param sex: '男'
        '''
        self.Name = name   # student1.Name = '小明'
        self.Age = age      # student1.Age = 20
        self.Sex = sex      # student1.Sex = '男'

# 再调用类产生对象
student1 = School_learn('小明',20,'')  # 实例化,此处相当于传了四个值:student1,'小明',20,'男'
print(student1.__dict__) # {'Name': '小明', 'Age': 20, 'Sex': '男'}

  注意:<1> __init__方法是在对象产生之后才会执行,只用来为对象进行初始化操作,不能有返回值。

     <2> 加上__init__方法后,实际的实例化过程分两步:

        first:先产生一个空对象 student1,

        second:触发School_learn.__init__()方法,传递参数 student1,'小明',20,‘男’

四、对象的使用

  对象属性的增删改查

#
student1.Hobby = 'reading'
print(student1.__dict__) # {'Name': '小明', 'Age': 20, 'Sex': '男', 'Hobby': 'reading'}

#
del student1.Hobby
print(student1.__dict__) # {'Name': '小明', 'Age': 20, 'Sex': '男'}

#
student1.Name = '小华'
print(student1.__dict__) # {'Name': '小华', 'Age': 20, 'Sex': '男'}
print(student1.Name) # 小华

#
print(student1.Sex) #
print(student1.__dict__)

student2 = School_learn('小敏',19,'')
print(student2.__dict__) # {'Name': '小敏', 'Age': 19, 'Sex': '女'}
print(student2.Name) # 小敏

 

五、小结

  1、站在不同的角度,我们所定义出的类是完全不同的,每个人的“上帝视角“各有所观,正如一千个人眼中有一千个哈姆莱特一般。

  2、现实中的类与程序中的类并不完全等同,现实世界,先有类,再有对象;程序中,先有类,再有对象。

  3、有时为了编程需要,我们需要定义一些生活中并不存在的类。

 

转载于:https://www.cnblogs.com/schut/p/8608594.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值