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 面向对象编程_组合与继承
#目录 前言 组合 派生 通过继承来覆盖重载方法 最常用的重载场景实例方法的重载 从标准类中派生类方法的重载 前言 我们定义一个类是希望能够把类当成模块来使用,并把类嵌入到我们的应用代码中,与其他的数 ...
随机推荐
- 地不安装Oracle,plsql远程连接数据库
由于Oracle的庞大,有时候我们需要在只安装Oracle客户端如plsql.toad等的情况下去连接远程数据库,可是没有安装Oracle就没有一切的配置文件去支持.最后终于发现一个很有效的方法,Or ...
- Leetcode929.Unique Email Addresses独特的电子邮件地址
每封电子邮件都由一个本地名称和一个域名组成,以 @ 符号分隔. 例如,在 alice@leetcode.com中, alice 是本地名称,而 leetcode.com 是域名. 除了小写字母,这些电 ...
- MSSQL2008 数据压缩方法
数据压缩功能使得SOL Server 2008允许在表.索引和分区中执行数据压缩,这样不仅可以节省磁盘空间,而且允许更多数据置入RAM中,从而提升数据库查询的性能. 1.启用行压缩 如果我们要在指定的 ...
- IE8下图片无法显示问题
一.背景图片不能显示的原因 代码: background:url(img/img1.jpg)no-repeat; background:url(img/img1.jpg) no-repeat; 第一个 ...
- 【JZOJ3853】【NOIP2014八校联考第2场第2试9.28】帮助Bsny(help)
EVRT Bsny的书架乱成一团了,帮他一下吧! 他的书架上一共有n本书,我们定义混乱值是连续相同高度书本的段数.例如,如果书的高度是30,30,31,31,32,那么混乱值为3:30,32,32,3 ...
- Mac查看Python安装路径和版本
目录 #查看当前所有Python版本路径 appledeMBP:~ apple$ which python2.7 /usr/local/bin/python2.7 appledeMBP:~ apple ...
- Directx11教程(64) tessellation学习(6)-PN Triangles
原文:Directx11教程(64) tessellation学习(6)-PN Triangles 前面我们用tessellation细分三角形或者四边形,产生的细分点都是在三角形或四边形 ...
- HDU_1005:Number Sequence
Problem Description A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1 ...
- phpexcel使用说明3
下面是总结的几个使用方法 include 'PHPExcel.php'; include 'PHPExcel/Writer/Excel2007.php'; //或者include 'PHPExcel/ ...
- 纯CSS3打造圆形菜单
原理是使用相对定位和绝对定位确定圆形菜单位置. 使用伪类选择器E:hover确定悬浮时候的效果,动画效果用CSS3的transition属性. 大概代码如下. html: <div id=&qu ...