博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
神奇语言 python 初识面向对象
阅读量:6277 次
发布时间:2019-06-22

本文共 3960 字,大约阅读时间需要 13 分钟。

一.面向对象初识:

1.1 回顾面向过程编程vs函数式编程

#面向过程编程,测量对象的元素个个数s1="fajfakljfalfa8"count=0for i in s1:    count +=1print(count)
函数编程式def foo(s):    count=0    for i in s:        count+=1    return countfoo("adasdadas")foo([1,2,3,4])

通过对比可知:函数编程较之面向过程编程最明显的两个特点:

1 减少代码的重用性

2 增强代码的可读性

1.2函数编程vs面向对象编程

#函数式编程#auth 认证相关def login():    passdef regisgter():    pass#account  账户相关def func1():    passdef func2():    pass#购物车相关def shopping(username,money)    passdef check_paidgoods(username,money)    passdef check_unpaidgoods(username,money):    passdef save(username,money):    pass
面向对象式编程class LoginHandler:    def login(self):        pass    def regisgter(self):        passclass Account:    def func1(self):        pass    def func2(self):        passclass ShoppingCar:    def shopping(username,money):        pass    def check_paidgoods(username,money):        pass    def check_unpaidgoods(username,money):        pass    def save(username,money):        pass

# 通过对此可以看出面向对象第一个有点:

面向对象编程:是一类相似功能函数的集合,使你的代码更清晰化,更合理化.

说第二个优点之前,先看看什么是面向对象.

面向对象的程序设计的核心是对象(上帝式思维),要理解u地向为何物,必须把自己当成上帝,上帝眼里世间存在的万物皆为对象,不存在也可以创造出来.

类:就是具有相同属性和功能的一类事物

对象:就是类的具体的表现

面向对象的第二个优点:

面向对象,要拥有上帝的视角看问题,类其实就是一个公共的模板,对象就从具体的模板实例化出来.

1.3 类的结构

class Human:    ""'    此类主要是构建人类    """    mind="有思想"#第一部分:静态属性 属性 静态变量 静态字段        dic={}     li=[]    def work(self):#第二部分:方法 函数 动态属性        print("人类会工作")""" class 是关键字与def用法相同,定义一个类.Human是此类的类名,类名使用驼峰体命名风格,首字母大写,私有类可用一个下划线开头.累的结构从大方向来说就分为两部分静态变量动态方法 """

二.从类明德角度研究类

2.1 类名操作静态属性

2.11 第一种,查看类中的所有内容:类名.__dict__方式。

class Human:    """    此类主要是构建人类    """    mind = '有思想'  # 第一部分:静态属性 属性 静态变量 静态字段    dic = {}    l1 = []    def work(self): # 第二部分:方法 函数 动态属性        # print(self)        print('人类会工作')print(Human.__dict__)print(Human.__dict__['mind'])Human.__dict__['mind'] = '无脑'print(Human.__dict__)  # 错误#通过这种方式只能查询,不能增删改.# 第一种方式只用户查询全部内容(一般不用单独属性查询).

2.12第二种:万能的点

class Human:    """     此类主要是构建人类    """    mind = '有思想'  # 第一部分:静态属性 属性 静态变量 静态字段    dic = {}    l1 = []    def work(self): # 第二部分:方法 函数 动态属性        # print(self)        print('人类会工作')    """print(Human.mind)#查Human.mind="无脑"#改print(Human.mind)del Human.mind #删Human.walk = '直立行走'print(Human.walk)# 通过万能的点 可以增删改查类中的单个属性
class Human:    """     此类主要是构建人类    """    mind = '有思想'  # 第一部分:静态属性 属性 静态变量 静态字段    dic = {}    l1 = []    def work(self): # 第二部分:方法 函数 动态属性        # print(self)        print('人类会工作')    """print(Human.mind)#查Human.mind="无脑"#改print(Human.mind)del Human.mind #删Human.walk = '直立行走'print(Human.walk)# 通过万能的点 可以增删改查类中的单个属性

对以上两种做一个总结:如果想查询类中的所有内容,通过 第一种__dict__方法,如果只是操作单个属性则用万能的点的方式。

2.2 类名操作动态方法

前提:除了两个特殊方法:静态方法,类方法之外,一般不会通过类名操作一个类中的方法

class Human:    """    此类主要是构建人类    """    mind = '有思想'  # 第一部分:静态属性 属性 静态变量 静态字段    dic = {}    l1 = []    def work(self): # 第二部分:方法 函数 动态属性        # print(self)        print('人类会工作')    def tools(self)        print('人类会使用工具')Human.work(111)Human.tools(111)下面可以做,但不用。Human.__dict__['work'](111)

三. 从对象的角度研究类

3.1 什么是对象

对象是从类中出来的,只要是类名加上(),这就是一个实例化过程,这个就会实例化一个对象。

其实实例化一个对象总共发生了三件事:

  1,在内存中开辟了一个对象空间。

  2,自动执行类中的__init__方法,并将这个对象空间(内存地址)传给了__init__方法的第一个位置参数self。

  3,在__init__ 方法中通过self给对象空间添加属性。

3.2 对象操作对象空间属性

 3.21 对象查询对象中所有属性。 对象.__dict__

3.22 对象操作对象中的单个属性。 万能的点 .

3.3 对象查看类中的属性

class Human:    mind = '有思想'    language = '实用语言'    def __init__(self,name,sex,age,hobby):        self.n = name        self.s = sex        self.a = age        self.h = hobbyobj = Human('barry','男',18,'运动')print(obj.mind)print(obj.language)obj.a = 666print(obj.a)

3.4 对象操作类中的方法

class Human:    mind = '有思想'    language = '实用语言'    def __init__(self,name,sex,age,hobby):        self.n = name        self.s = sex        self.a = age        self.h = hobby    def work(self):        print(self)        print('人类会工作')    def tools(self):        print('人类会使用工具')obj = Human('barry','男',18,'运动')obj.work()obj.tools()

self:

self其实就是类中方法的第一个位置参数,只不过解释器会自动将调用这个函数的对象传给self.所以咱们把类中的方法的第一个参数约定俗称设置self,代表这个就是对象.

转载于:https://www.cnblogs.com/zhangguangpei/p/10319715.html

你可能感兴趣的文章
LINUX常用命令
查看>>
百度云盘demo
查看>>
概率论与数理统计习题
查看>>
初学structs2,简单配置
查看>>
Laravel5.0学习--01 入门
查看>>
时间戳解读
查看>>
sbin/hadoop-daemon.sh: line 165: /tmp/hadoop-hxsyl-journalnode.pid: Permission denied
查看>>
@RequestMapping 用法详解之地址映射
查看>>
254页PPT!这是一份写给NLP研究者的编程指南
查看>>
《Data Warehouse in Action》
查看>>
String 源码浅析(一)
查看>>
Spring Boot 最佳实践(三)模板引擎FreeMarker集成
查看>>
Cable:360实现的新虚拟网络架构
查看>>
Fescar 发布 0.2.3 版本,支持 Redis 和 Apollo
查看>>
Google MapReduce到底解决什么问题?
查看>>
CCNP-6 OSPF试验2(BSCI)
查看>>
Excel 2013 全新的图表体验
查看>>
openstack 制作大于2TB根分区自动扩容的CENTOS镜像
查看>>
Unbuntu安装遭遇 vmware上的Easy install模式
查看>>
几个常用的ASP木马
查看>>