python进阶之面向对象初识
面向对象
不同于面向过程的编程思想,面向对象是一种将程序抽象为一个个对象的编程思想,能更好的处理现实世界到的一些复杂问题。
通过下面的例子来初步了解面向对象的编程方式。
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进阶之面向对象初识的更多相关文章
- python进阶01 面向对象、类、实例、属性封装、实例方法
python进阶01 面向对象.类.实例.属性封装.实例方法 一.面向对象 1.什么是对象 #一切皆对象,可以简单地将“对象”理解为“某个东西” #“对象”之所以称之为对象,是因为它具有属于它自己的“ ...
- Python进阶(十三)----面向对象
Python进阶(十三)----面向对象 一丶面向过程编程vs函数式编程vs面向对象编程 面向过程: 简而言之,step by step 一步一步完成功能,就是分析出解决问题所需要的步骤,然后用函 ...
- Python进阶之面向对象编程
面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机 ...
- python递归 及 面向对象初识及编程思想
递归 及 面向对象初识及编程思想 一.递归 1.定义: 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. (1)递归就是在过程或函数里调用自身: (2)在使用递 ...
- Python进阶之面向对象编程(二)
Python面向对象编程(二) .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB& ...
- Python进阶之面向对象编程概述
Python面向对象编程(一) .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB& ...
- python记录_day15 面向对象初识
一.面向过程和面向对象 1.面向过程 以我为中心,做一件事先干什么,在干什么,后干什么,有一套清楚完整的流程.核心是“过程”. 优点:将要解决的问题流程化, 编写相对简单 缺点:可扩展性差 2.面向对 ...
- Python进阶-XIV 面向对象初步
1.面向对象的引入 def Person(*args): ''' 定义一个人 :param args: 人的属性 :return: 人的所有属性的字典 ''' info = {} info['name ...
- Python 进阶_OOP 面向对象编程_组合与继承
#目录 前言 组合 派生 通过继承来覆盖重载方法 最常用的重载场景实例方法的重载 从标准类中派生类方法的重载 前言 我们定义一个类是希望能够把类当成模块来使用,并把类嵌入到我们的应用代码中,与其他的数 ...
随机推荐
- 优化SQL之最佳索引
SQL优化工具Tosska SQL Tuning Expert for Oracle,帮助SQL开发人员解决SQL性能问题. 本工具主要创始人Richard To, 资深ITPUB元老,从1996年开 ...
- docker相关教程【转】
https://www.w3cschool.cn/docker/docker-run-command.html 运行容器 https://www.runoob.com/docker/docker-im ...
- Leetcode925.Long Pressed Name长按键入
你的朋友正在使用键盘输入他的名字 name.偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次. 你将会检查键盘输入的字符 typed.如果它对应的可能是你的朋友的名字(其中一 ...
- 移动端的vh 和 vw简介和使用场景
vw 相对于视窗的宽度:视窗宽度是100vw:vh则类似,是相对于视窗的高度,视窗高度是100vh. 这里的视窗指的又是啥? 是浏览器内部宽度大小(window.innerWidth)? 是整个浏览器 ...
- PHP学习(数据类型)
PHP中,支持8种原始类型,其中包括四种标量类型.两种复合类型和两种特殊类型.PHP是一门松散类型的语言,不必向PHP声明变量的数据类型,PHP会自动把变量转换为自动的数据类型,一定程度降低了学习PH ...
- git安装方法
点击 http://git-scm.com/download 选择你使用的操作系统,如果是linux就可以看到命令行,windows则是下载客户端
- 对快速排序的分析 Quick Sort
快速排序 快排的基本思想是:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序.通常可选第一个记录为基准 ...
- SPSS和Mplus如何做非线性中介调节效应分析?如倒U形曲线
SPSS和Mplus如何做非线性中介调节效应分析?如倒U形曲线 传统的线性回归模型用的比较多,但有时候变量之间的关系更符合非线性关系,此时使用非线性模型其拟合度会更好,模型预测效果更佳.在非线性关系中 ...
- oracle怎么捕获表上的DML语句(不包括select)语句)
可以采用dml触发器,如 CREATE OR REPLACE TRIGGER tr_capt_sql BEFORE DELETE OR INSERT OR UPDATE ON manager.test ...
- 阿里云MaxCompute 2019-6月刊
您好,MaxCompute 2019.6月刊为您带来6月产品.技术最新动态,欢迎阅读. 导读 [功能发布]6月产品重要发布 [文档更新]6月重要文档更新推荐 [干货精选]6月精选技术文章推荐 [活动回 ...