码迷,mamicode.com
首页 > 其他好文 > 详细

面向对象之类与对象

时间:2018-03-20 13:52:50      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:传递   不完全   str   变量   名称空间   才有   obj   class关键字   操作   

一、类与对象的概念

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

 

二、定义类

  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、有时为了编程需要,我们需要定义一些生活中并不存在的类。

 

面向对象之类与对象

标签:传递   不完全   str   变量   名称空间   才有   obj   class关键字   操作   

原文地址:https://www.cnblogs.com/schut/p/8608594.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!