面向对象 

  不同于面向过程的编程思想,面向对象是一种将程序抽象为一个个对象的编程思想,能更好的处理现实世界到的一些复杂问题。

  通过下面的例子来初步了解面向对象的编程方式。

class Person:  # class + 类名 :定义一个类
place = 'earth' # 类属性 (静态属性) # __init__初始化方法,默认创建一个self对象,用来接收对象的属性。可以没有初始化方法
def __init__(self, name, sex, age, nationality): # self必须有,其他的参数以对象具有的属性来定义
self.name = name # 实例化属性
self.sex = sex
self.age = age
self.nationality = nationality def walk(self): # 方法即函数 (动态属性),定义这一类对象所能做的事情。self必须有
print('%s行走' % self.name) zxc = Person('张三', '男', 24, '中国') # 对象 = 类名(实例化属性) -- 实例化:创建了一个具体的对象
print(zxc.name) # 张三 查看对象的属性
print(Person.place) # earth 查看类的属性
print(zxc.__dict__) # 查看对象的全部属性 是个字典
print(Person.__dict__) # 查看类的全部属性 是个字典
zxc.name = '李四' # 修改属性
zxc.walk() # 李四行走 使用方法 相当于Person.walk(zxc)

  通过上面的例子简单总结一下

"""
类:用来描述一类具有相同属性和方法的对象的集合
实例化:对象 = 类名()
对象:1,可以查看属性 2,修改属性 3,调用方法
类:1,实例化 2,调用方法,但是要自己传self参数 3,查看和修改类属性
"""

  下面了解一下类和对象的命名空间,先定义一个类,在实例化两个对象做对比。

class Demo:
class_nature = '静态属性'
class_nature1 = ['静态属性'] def __init__(self, object_nature):
self.nature = object_nature def dynamic_nature(self):
print('动态属性') d = Demo('实例化属性')
d1 = Demo('实例化属性1')

  先研究下类

# 类只能调用类属性和动态属性即在类的命名空间中的名字
print(Demo.class_nature)
# print(Demo.nature) # 报错 类不能访问对象命名空间中的名字

  在看下对象

# 对象可以访问类命名空间中的名字
print(d.class_nature) # 静态属性
d.dynamic_nature() # 动态属性

  可以看到对象可以访问类的命名空间中的名字,进而看看是否可以通过对象对类属性进行修改。

# 当属性是不可变数据类型,对象不能修改类命名空间中的名字,所有的修改相当于在对象自己内部创建了一个新的属性
Demo.class_nature = '类属性修改'
d.class_nature = 'd类属性修改'
d1.class_nature = 'd1类属性修改'
print(Demo.class_nature) # 类属性修改
print(d.class_nature) # d类属性修改
print(d1.class_nature) # d1类属性修改

  在看可变数据类型

# 当属性是可变数据类型,对象可以修改类属性里面的元素,且修改会作用于全部的对象。但是类属性本身还是不能修改
print(Demo.class_nature1) # ['静态属性']
d.class_nature1[0] = 'd修改'
d.class_nature1 = ['修改']
print(d.class_nature1) # ['修改']
print(Demo.class_nature1) # ['d修改']
print(d.class_nature1) # ['修改']
print(d1.class_nature1) # ['d修改']

  类的组合使用:一个对象的属性值是另外一个类的对象

  下面来个例子感受一下

class Teacher:
def __init__(self,name, age, birthday):
self.name = name
self.age = age
self.birthday = birthday # 接收Birthday类的对象,从而通过Teacher类的对象就可以操作Birthday类 class Birthday:
def __init__(self, year, month, day):
self.year = year
self.month = month
self.day = day birth = Birthday(1992, 12, 23)
teacher = Teacher('张老师', 26, birth)
print(teacher.birthday.year) #
print(teacher.birthday.month) #
print(teacher.birthday.day) #

python进阶之面向对象初识的更多相关文章

  1. python进阶01 面向对象、类、实例、属性封装、实例方法

    python进阶01 面向对象.类.实例.属性封装.实例方法 一.面向对象 1.什么是对象 #一切皆对象,可以简单地将“对象”理解为“某个东西” #“对象”之所以称之为对象,是因为它具有属于它自己的“ ...

  2. Python进阶(十三)----面向对象

    Python进阶(十三)----面向对象 一丶面向过程编程vs函数式编程vs面向对象编程 面向过程: ​ 简而言之,step by step 一步一步完成功能,就是分析出解决问题所需要的步骤,然后用函 ...

  3. Python进阶之面向对象编程

    面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机 ...

  4. python递归 及 面向对象初识及编程思想

    递归 及 面向对象初识及编程思想   一.递归 1.定义: 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. (1)递归就是在过程或函数里调用自身: (2)在使用递 ...

  5. Python进阶之面向对象编程(二)

    Python面向对象编程(二) .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB& ...

  6. Python进阶之面向对象编程概述

    Python面向对象编程(一) .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB& ...

  7. python记录_day15 面向对象初识

    一.面向过程和面向对象 1.面向过程 以我为中心,做一件事先干什么,在干什么,后干什么,有一套清楚完整的流程.核心是“过程”. 优点:将要解决的问题流程化, 编写相对简单 缺点:可扩展性差 2.面向对 ...

  8. Python进阶-XIV 面向对象初步

    1.面向对象的引入 def Person(*args): ''' 定义一个人 :param args: 人的属性 :return: 人的所有属性的字典 ''' info = {} info['name ...

  9. Python 进阶_OOP 面向对象编程_组合与继承

    #目录 前言 组合 派生 通过继承来覆盖重载方法 最常用的重载场景实例方法的重载 从标准类中派生类方法的重载 前言 我们定义一个类是希望能够把类当成模块来使用,并把类嵌入到我们的应用代码中,与其他的数 ...

随机推荐

  1. 什么? 1XIN = 21BTC

    什么? 1XIN = 21BTC 最初看到这个标题,我还回去考证一下. 原来是 Mixin Network 的宣传广告. BTC 是多少? 2100万枚. XIN 是 100 万枚. 所以才有了 1X ...

  2. 地不安装Oracle,plsql远程连接数据库

    由于Oracle的庞大,有时候我们需要在只安装Oracle客户端如plsql.toad等的情况下去连接远程数据库,可是没有安装Oracle就没有一切的配置文件去支持.最后终于发现一个很有效的方法,Or ...

  3. 移动端fixed定位在底部,出现键盘后消失

    jq var h=$(window).height(); $(window).resize(function() { if($(window).height()<h){ $('.nav').hi ...

  4. FJWC2018

    晚上水到8:40,感觉药丸. 把电脑带回寝室,大半夜敲键盘…… bzoj5254红绿灯 泰迪每天都要通过一条路从家到学校,这条路的起点是泰迪家,终点则是学校. 这条路中间还有n个路口,从第i-1个路口 ...

  5. mac上SVN的图形工具 SmartSVN注册

    mac上SVN的图形工具 SmartSVN注册 打开smartsvn,选中license注册 选中文件smartsvn.license,下一步下一步就ok了 smartsvn.license Name ...

  6. IE下的双外边距浮动bug

    最常见且最容易发现的额一个bug是IE 6和最低版本中的双外边距浮动bug.这个bug是任何浮动元素上的外边距加倍. 上面代码中,div盒子向左边浮动,设置的margin-left的值是10px.在c ...

  7. Spring_Bean的生命周期

    init-method="init" destroy-method="destory" 指定初始化和销毁方法 创建Bean后置处理器 <!-- 实现Bea ...

  8. kubernetes1.5新特性跟踪(续)

    Kubernetes发布历史回顾 Kubernetes 1.0 - 2015年7月发布 Kubernetes 1.1 - 2015年11月发布 Kubernetes 1.2 - 2016年3月发布 K ...

  9. SPSS分析技术:二阶聚类分析;为什么出现大学生“裸贷”业务,因为放贷者知道贷款者还不起

    SPSS分析技术:二阶聚类分析:为什么出现大学生"裸贷"业务,因为放贷者知道贷款者还不起 今天将介绍一种智能聚类法,二阶聚类法,在开始介绍之前,先解答很多人在后台提出的一个疑问:那 ...

  10. 数据挖掘算法R语言实现之决策树

    数据挖掘算法R语言实现之决策树 最近,看到很多朋友问我如何用数据挖掘算法R语言实现之决策树,想要了解这方面的内容如下: > library("party")导入数据包 > ...