面向对象 

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

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

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. oracle 写存储过程有返回值时 注意在loop循环处添加返回值:=

    例子: create or replace procedure p_xl is v_count NUMBER(10); begin for rs in(select yhbh from dbyh) l ...

  2. R语言因子

    R语言因子 因子是它们用于将数据进行分类并将其存储为级别的数据对象.它们可以同时存储字符串和整数.它们在具有唯一值的有限数目的列是有用的. 例如,"male, "Female&qu ...

  3. Unrecognised tag: 'build'

    [ERROR] [ERROR] Some problems were encountered while processing the POMs:[ERROR] Malformed POM H:\ec ...

  4. iOS9新系统下App Store应用上传新指南

    http://www.cocoachina.com/appstore/20151010/13691.html 最近频繁收到小伙伴们的反馈,说经过前期学习已对ASO规则略有了解,但APP的提交审核是由技 ...

  5. 【风马一族_软件】微软卸载工具_msicuu2.exe

    msicuu2.exe是微软的Windows Installer清理工具,可以用来清理微软安装包软件产生的垃圾,当然也可以拿来作为修复相关软件的卸载准备使用 下载链接:http://files.cnb ...

  6. n!素因子p的幂 swjtuOJ 2090【数论】

    原文地址:http://blog.csdn.net/u012717411/article/details/47334969(感谢作者) 素因子分解写的非常好!数论一道好题:给以两个大整数n,s(n&l ...

  7. hdu3549 最大流

    #include<stdio.h> #include<string.h> #include<queue> #define MAXN 1010 using names ...

  8. hdu5443 线段树 长春网赛

    #include<stdio.h> #include<string.h> #define lson l,m,rt<<1 #define rson m+1,r,rt& ...

  9. Maven中央存储库 和 如何从Maven远程存储库下载?

    当你建立一个 Maven 的项目,Maven 会检查你的 pom.xml 文件,以确定哪些依赖下载.首先,Maven 将从本地资源库获得 Maven 的本地资源库依赖资源,如果没有找到,然后把它会从默 ...

  10. tensorflow兼容处理 tensorflow.compat.v1

    https://www.wandouip.com/t5i183316/ 引言 原来引用过一个段子,这里还要再引用一次.是关于苹果的.大意是,苹果发布了新的开发语言Swift,有非常多优秀的特征,于是很 ...