一。面向对象概念

  面向对象是一种编程思想,是实现代码高内聚低耦合的关键概念,核心是对象,程序就是由多个对象组成,程序员调度这些对象进行工作。

  而与之相对的是面向过程的编程。

    优点:逻辑清晰 , 复杂问题简单化,流程化

    缺点: 扩展性差,可维护性差

  比如将大象放入冰箱的三步:1.打开冰箱门,2.将大象放进去,3.关上冰箱门。

  而使用了面向对象的方法就是找一个能把大象放入冰箱的人。

  面向对象有三个优点:

    1.扩展性。

    2.灵活性。

    3.重用性。

  而缺点是1.程序的复杂度大大提高。2.无法判断程序的走向。  

  如今,大部分面向人的软件都是采用面向对象编程的程序,而对于机器来说。都是使用面向过程。如编写操作系统。

二。类和对象

  1。对象:

    对象就是一个具体的事务,一个内涵技能与数据的集合

    创建对象时使用大驼峰,就是将第一个字母大写,小驼峰就是将第一个字母小写

    类就是对一系列对象的模糊定义,比如动物是类,类中包函了众多对象中共有的特性与技能。例子

class animal:
height=100
width=100
weight=100

    这便创建了一个动物类,每个动物都有宽和高,但不是每个动物的高都是100,所以需要对类实例化一个对象,创造出一个特别的对象:

dog=animal
dog.height=50

    创建了一个dog对象,将他的高设置为50。

    当实例化对象后,可以对其内部的数据修改,然后输出他的所有数据可以看到

print(dog.height,dog.weight,dog.width)
#50 100 100

    修改的数据生效了,而没修改的数据还是原来的数据,原理如图

    当dog的名称空间里有height时就会采用dog对象中的数值,当dog名称空间中没有的数据就会在class中找。

    如果dog中的数据发生变化,dog2中的数据不会发生改变。

    对于对象中的增删,对类也是适用的,:

dog=animal
dog.height=50
animal.wd=100
del animal.width
print(dog.height,dog.weight,dog.width,dog.wd)

    修改上述已经演示过了,而查询需要使用关键词(__dict__),会将对象中所以属性打印

print(dog.__dict__)
print(animal.__dict__)

三。init

  init是一个类里的内置函数,当创建对象时会自动运行该函数,可以快速赋值。

  init会自动将对象作为第一个参数传入,参数名称位self ,self可以是别的名字,但不建议改。

class person:
def __init__(self,name,age,sex='male'):
self.name=name
self.age=age
self.sex=sex lzx=person('lzx',23)r

  如此定义了一个person对象。

  对象的精髓就是讲数据和处理数据的函数整合到一起 ,这样一来拿到一个对象就同时拿到了需要处理的数据以及处理数据的函数。

四。对象类的绑定方法

  在写好一个类后,要在里面写一个方法具有对象特色的时候可以把self作为参数传入,而使用class作为绑定时需要使用@classmethon装饰器对其进行装饰,在使用cls将参数传入,这种名字可以改变,但是最好使用该名称,以便二次开发。

class person:
country='china'
def __init__(self,name):
self.name=name def say_hello(self):
print('hello,i am %s'%self.name) @classmethod
def show_country(cls):
print(cls.country) @staticmethod
def show_hello():
print('hello') lzx1=person('lzx')
lzx1.say_hello()
lzx1.show_country()
lzx1.show_hello()
#hello,i am lzx
#china
#hello

  而staticmethod是使用非绑定方法,和类外的方法使用是一样的。

day20_7.24 面向对象1的更多相关文章

  1. day 24 面向对象之继承及属性查找顺序

    组合 组合:自定义类的对象作为另外一个类的属性 class Teacher: def init(self, name, age): self.name = name self.age = age t1 ...

  2. 24 - 面向对象基础-多继承-super-mro-Mixin

    目录 1 类的继承 2 不同版本的类 3 基本概念 4 特殊属性和方法 5 继承中的访问控制 6 方法的重写(override) 6.1 super 6.2 继承中的初始化 7 多继承 7.1 多继承 ...

  3. JAVA_SE基础——24.面向对象的内存分析

    黑马程序员入学blog ... 接着上一章的代码: //车类 class Car{ //事物的公共属性使用成员变量描述. String name; //名字的属性 String color; //颜色 ...

  4. python基础(24):面向对象三大特性一(继承)

    1. 继承 1.1 什么是继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类. python中类的继承分为:单继承和多继 ...

  5. python之路——面向对象(基础篇)

    面向对象编程:类,对象 面向对象编程是一种编程方式,此编程方式的落地需要使用 "类" 和 "对象" 来实现,所以,面向对象编程其实就是对 "类&quo ...

  6. JAVA_SE基础——25.面向对象练习

    黑马程序员入学blog ... 昨晚我写了篇面向对象的内存分析,今天我们来做个小练习.. 需求: 使用java描述一个车与修车厂两个事物, 车具备的公共属性:轮子数. 名字. 颜色 ,还 具备跑的功能 ...

  7. ssh面试题

    ssh面试题  创建时间: 2015-8-12 22:37 来源: http://wenku.baidu.com/link?url=cw1B46f98hAde0kmr3J-wv7PpklZJRmf6I ...

  8. [JAVA设计模式]第一部分:接口、抽象类、设计原则

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  9. SSH 面试题集锦

    1.  BeanFactory的作用是什么?   [中] BeanFactory是配置.创建.管理bean的容器,有时候也称为bean上下文.Bean与bean的依赖关系,也是由BeanFactory ...

随机推荐

  1. 对象锁和class锁

    对象锁:就是这个锁属于这个类的对象实例,可以通过为类中的非静态方法加synchronized关键字 或者使用 synchronized(this) 代码块,为程序加对象锁. Class锁:就是这个锁属 ...

  2. Python进阶-XVIII 封装、(属性、静态方法、类方法)语法糖、反射

    1.封装 类中的私有化:属性的私有化和方法的私有化 会用到私有的这个概念de场景 1.隐藏起一个属性 不想让类的外部调用 2.我想保护这个属性,不想让属性随意被改变 3.我想保护这个属性,不被子类继承 ...

  3. Web前端开发框架大全-详述

    可以说,前端技术的发展是互联网自身发展的一个缩影! 前端技术的发展经历了web1.0时代,即网页只能展示信息,几乎没有交互可言: web2.0时代,web2.0不再是单维的,逐渐发展为双向交流,另一特 ...

  4. 第02组Beta版本演示

    组长博客 组名:十一个憨比 本组组员: 学号 姓名 分工 贡献比例 181700413 黄智 写Beta冲刺的四次博客,写评审表,写word,统筹规划 9% 131700309 林闽沪 代码实现,答辩 ...

  5. React中的fetch请求相关

    fetch在reactjs中等同于 XMLHttpRequest,它提供了许多与XMLHttpRequest相同的功能,但被设计成更具可扩展性和高效性. Fetch 的核心在于对 HTTP 接口的抽象 ...

  6. C++中enum(转载)

    原文地址:http://www.cnblogs.com/ForFreeDom/archive/2012/03/22/2412055.html 1.为什么要用enum       写程序时,我们常常需要 ...

  7. Go 中 ORM 的 Repository(仓储)模式

    ORM 在业务开发中一直扮演着亦正亦邪的角色.很多人赞颂 ORM,认为 ORM 与面向对象的契合度让代码简洁有道.但是不少人厌恶它,因为 ORM 隐藏了太多的细节,埋下了超多的隐患.在 Go 中,我们 ...

  8. python-6-for循环及format三种用法

    前言 循环我们前面讲过了无限循环,那么for循环属于什么循环呢?显然就是有限循环: 另外格式化输出我们前面也讲过,但是format也能做到不一样的格式化输出.一起看看吧! 一.for 循环 1.fro ...

  9. 【shell脚本】打印九九乘法表

    打印九九乘法表 一.seq介绍 seq命令用于以指定增量从首数开始打印数字到尾数,即产生从某个数到另外一个数之间的所有整数,并且可以对整数的格式.宽度.分割符号进行控制 语法: [1] seq [选项 ...

  10. Mybatis传递多个参数的几种方式

    顺序传参法 public User selectUser(String name, int deptId); <select id="selectUser" resultMa ...