面向对象三大特征: 封装 继承 多态

-封装:对类中成员属性和方法的保护,控制外界对内部成员的访问,修改,删除等操作
私有的: private
在本类内部可以访问,类的外部不可以访问.(python中 属性或者方法前面加上两个下划线 ‘__’) 受保护的:protected
允许有继承关系的子类访问(Python开发者约定俗成的,属性或者方法前面加上一个下划线 ‘_’) 公有的: public
在本类的内部和外部都可以访问.
属性 含义
__doc__ 该函数的文档字符串,没有则为 None;不会被子类继承。 可写
__name__ 该函数的名称。 可写
__qualname__ 该函数的 qualified name。 3.3 新版功能. 可写
__module__ 该函数所属模块的名称,没有则为 None。 可写
__defaults__ 由具有默认值的参数的默认参数值组成的元组,如无任何参数具有默认值则为 None。 可写
__code__ 表示编译后的函数体的代码对象。 可写
__globals__ 对存放该函数中全局变量的字典的引用 --- 函数所属模块的全局命名空间。 只读
__dict__ 命名空间支持的函数属性。 可写
__closure__ None 或包含该函数可用变量的绑定的单元的元组。有关 cell_contents 属性的详情见下。 只读
__annotations__ 包含参数标注的字典。字典的键是参数名,如存在返回标注则为 'return'。 可写
__kwdefaults__ 仅包含关键字参数默认值的字典。 可写
绑定方法:
1.绑定到对象 : 当对象去调用类中成员方法时,系统会默认把该对象当成参数传递给该方法
2.绑定到类 : 当对象或者类去调用类中成员方法时,系统会默认把该类当成参数传递给该方法
使用方式:
对象.成员属性
对象.成员方法
class Car():
# 公有属性
brand = "1" # 受保护属性
_wheel = 4 # 私有属性
__price = 50000 # 公有方法
def run(self):
print("百公里油耗50L,brand={} , price={}".format(self.brand, self.__price)) # 私有方法
def __info(self):
print("车主信息都想看,想屁吃呢!") # 实例化对象(类的实例化)
my_car = Car()
my_car.brand = '五菱宏光' # (1)实例化的对象访问成员属性和方法
# 公有
print(my_car.brand)
# 其中的 __price是在类里面访问的
my_car.run() # (2)实例化的对象动态添加公有成员属性
my_car.color = "红" # __dict__ 获取类对象的内部成员
# 通过这个可以查看怎么内部的私有成员/修改私有成员
print(my_car.__dict__)
print(Car.__dict__) # (3)实例化的对象动态添加公有成员方法
# 1.无参方法
def 喇叭():
print('滴滴滴滴的的叫') my_car.喇叭 = 喇叭
my_car.喇叭() # 2.有参方法
# 基本版
def price(num):
print("我的价格为{}".format(num)) my_car.price = price
my_car.price(2100) # 升级版
def price1(num, obj):
print("{1}现在价格为{0}".format(num, obj.brand)) my_car.price1 = price1
my_car.price1(51000, my_car) # 究极版
"""如果要创建绑定方法,参数的顺序,self对象本身要放到第一位."""
def price1(obj,num):
print("{}现在价格为{}".format(obj.brand, num))
import types
# 创建绑定方法,系统自动把该对象当成参数传递给方法;
# types.MethodType(方法,对象) => 绑定方法
my_car.price1 = types.MethodType(price1,my_car)
my_car.price1(20000) # lambda表达式
my_car.引擎 = lambda : print('V12')
my_car.引擎()
-继承:一个类除了自身所拥有的属性方法之外,还获取了另外一个类的成员属性和方法
super调用父类方法
(1)super本身是一个类 super()是一个对象 用于调用父类的绑定方法
(2)super() 只应用在绑定方法中,默认自动传递self对象 (前提:super所在作用域存在self)
(3)super用途: 解决复杂的多继承调用顺序
issubclass(class, classinfo)
issubclass() 方法用于判断参数 class 是否是类型参数 classinfo 的子类
参数
class -- 类。
classinfo -- 类。
返回值
如果 class 是 classinfo 的子类返回 True,否则返回 False class A:
pass
class B(A):
pass print(issubclass(B,A)) # 返回 True
魔术方法(特定时机自动触发)
#__init__魔术方法(构造方法)
'''
触发时机:实例化对象,初始化的时候触发
功能:为对象添加成员
参数:参数不固定,至少一个self参数
返回值:无
'''
#__new__ 魔术方法
'''
触发时机:实例化类生成对象的时候触发(触发时机在__init__之前)
功能:控制对象的创建过程
参数:至少一个cls接受当前的类,其他根据情况决定
返回值:通常返回对象或None
'''
#__del__ 魔术方法(析构方法)
'''
触发时机:当对象被内存回收的时候自动触发[1.页面执行完毕回收所有变量 2.所有对象被del的时候]
功能:对象使用完毕后资源回收
参数:一个self接受对象
返回值:无
'''
#__call__ 魔术方法
'''
触发时机:把对象当作函数调用的时候自动触发
功能: 模拟函数化操作
参数: 参数不固定,至少一个self参数
返回值: 看需求
'''
#__str__ 魔术方法
'''
触发时机: 使用print(对象)或者str(对象)的时候触发
功能: 查看对象
参数: 一个self接受当前对象
返回值: 必须返回字符串类型
'''
#__repr__ 魔术方法
'''
触发时机: 使用repr(对象)的时候触发
功能: 查看对象,与魔术方法__str__相似
参数: 一个self接受当前对象
返回值: 必须返回字符串类型
'''
#----普通变量的基本操作,如果应用在对象上,也有相应的魔术方法

#__bool__ 魔术方法
'''
触发时机:使用bool(对象)的时候自动触发
功能:强转对象
参数:一个self接受当前对象
返回值:必须是布尔类型
'''
'''
类似的还有如下等等(了解):
__complex__(self) 被complex强转对象时调用
__int__(self) 被int强转对象时调用
__float__(self) 被float强转对象时调用
...
...
'''
#__add__ 魔术方法  (与之相关的__radd__ 反向加法)
'''
触发时机:使用对象进行运算相加的时候自动触发
功能:对象运算
参数:二个对象参数
返回值:运算后的值
'''
'''
类似的还有如下等等(了解):
__sub__(self, other) 定义减法的行为:-
__mul__(self, other) 定义乘法的行为:
__truediv__(self, other) 定义真除法的行为:/
...
...
'''
#__len__ 魔术方法
'''
触发时机:使用len(对象)的时候自动触发
功能:用于检测对象中或者类中某个内容的个数
参数:一个self接受当前对象
返回值:必须返回整型
'''
'''
类似的还有如下等等(了解):
__iter__(self) 定义迭代容器中的元素的行为
__reversed__(self) 定义当被 reversed() 调用时的行为
__contains__(self, item) 定义当使用成员测试运算符(in 或 not in)时的行为
...
...
'''
-多态:不同的子类对象,调用相同的父类方法,产生不同的执行结果

OOP-面向对象(二)的更多相关文章

  1. OOP 面向对象 七大原则 (二)

    OOP 面向对象   七大原则 (二) 上一篇写到了前四个原则,这一篇继续~~ 接口隔离:客户端不应该依赖它不需要的接口:一个类对另一个类的依赖应该建立在最小的接口上. 又是一句大白话~就是说接口尽量 ...

  2. OOP面向对象三大特点

    OOP面向对象三大特点 (一)封装:将现实中一个事物的属性和功能集中定义在一个对象中.(创建对象) 创建对象的3种方式: 1.直接量方式:(创建一个单独的对象) var obj={ 属性名:值,    ...

  3. 2. 星际争霸之php面向对象(二)

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  4. Javascript面向对象二

    Javascript面向对象二 可以通过指定原型属性来对所有的对象指定属性, Object.prototype.name="zhangsan"; Object.prototype. ...

  5. OOP 面向对象 七大原则 (一)

    OOP 面向对象   七大原则 (一) 大家众所周知,面向对象有三大特征继承封装多态的同时,还具有这七大原则,三大特征上一篇已经详细说明,这一篇就为大家详解一下七大原则: 单一职责原则,开闭原则,里氏 ...

  6. OOP面向对象 三大特征 继承封装多态

    OOP面向对象 ----三大特征 继承封装多态 面向对象(Object Oriented,OO)是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构 ...

  7. 用C实现OOP面向对象编程(1)

    如摘要所说,C语言不支持OOP(面向对象的编程).并这不意味着我们就不能对C进行面向对象的开发,只是过程要复杂许多.原来以C++的许多工作,在C语言中需我们手动去完成. 博主将与大家一起研究一下如下用 ...

  8. OOP面向对象程序设计原则

    OOP面向对象程序设计原则 开闭原则(Open Close Principle) 对扩展开放,对修改关闭 里氏代换原则(Liskov Substitution Principle) 继承必须确保超累所 ...

  9. javaScript设计模式之面向对象编程(object-oriented programming,OOP)(二)

    接上一篇 面向对象编程的理解? 答:面向对象编程,就是将你的需求抽象成一个对象,然后针对这个对象分析其特征(属性)与动作(方法).这个对象我们称之为类.面向对象编程思想其中一个特点就是封装,就是把你需 ...

  10. 面向对象(OOP)二

    一.“魔术”函数 - 自动调用 魔术方法 在面向对象有一些特别的方法,无需特别定义,已自动具备某些功能,例如构造函数__construt,这些方法统称魔术方法,在日后的编程中,可以使用这些方法的特性设 ...

随机推荐

  1. LDAP启动TLS 完整操作流程

    配置LDAP启动TLS 阅读本文之前,建议初学的小伙伴先看一下上一篇:完整的 LDAP + phpLDAPadmin安装部署流程 (ubuntu18.04) 以下正文: 接下来的操作承接上文,还是在同 ...

  2. 第50天学习打卡(CSS 圆角边框 盒子阴影 定位)

    4.4圆角边框 圆角边框:  <!DOCTYPE html> <html lang="en"> <head>     <meta char ...

  3. 迭代器 (Iterator) 和 生成器 (Generator)

    其他章节请看: es6 快速入门 系列 迭代器 (Iterator) 和 生成器 (Generator) 试图解决的问题 let colors = ['red', 'blue', 'green', ' ...

  4. Java数组练习(打印杨辉数组)

    打印杨辉数组 package com.kangkang.array; import java.util.Scanner; public class demo02 { public static voi ...

  5. 你们一般都是怎么进行SQL调优的?MySQL在执行时是如何选择索引的?

    前言 过年回来的第二周了,终于有时间继续总结知识了.这次来看一下SQL调优的知识,这类问题基本上面试的时候都会被问到,无论你的岗位是后端,运维,测试等等. 像本文标题中的两个问题,就是我在实际面试过程 ...

  6. 重复代码的克星,高效工具 VSCode snippets 的使用指南

    为什么要用 snippets(代码段)? 不管你使用何种编程语言,在我们日常的编码工作中,都会存在有大量的重复代码编写,例如: 日志打印: console.log,log.info('...') 输出 ...

  7. 定西+简单dp

    定西 ECNU-3531 #include<iostream> #include<cstdio> #include<algorithm> #include<c ...

  8. kubernetes生产实践之redis-cluster

    方案一 自定义yaml文件安装redis cluster 背景 在Kubernetes中部署Redis集群面临挑战,因为每个Redis实例都依赖于一个配置文件,该文件可以跟踪其他集群实例及其角色.为此 ...

  9. 选择 FreeBSD 而不是 Linux 的技术性原因3

    选择 FreeBSD 而不是 Linux 的技术性原因3 jail FreeBSD Jails 系统是另一个惊人的工程壮举. 在 2000 年 3 月 14 日的 4.0 版本中,FreeBSD 引入 ...

  10. 1_JVM与Java体系结构

    目录 JVM与Java体系结构 前言 架构师每天都在思考什么? 为什么要学习JVM Java vs C++ 推荐书籍 Java生态圈 字节码 多语言混合编程 Java发展的重大事件 虚拟机与Java虚 ...