理解面向对象

基本原则是,计算机程序由多个能够起到子程序作用的单元或对象组合而成

关键性观念是,数据以及对数据的操作封装在一起,组成一个相互依存、不可分割的整体,即对象

python面向对象特性

完全支持面向对象的基本功能,如封装、继承、多态以及基类方法的覆盖或重写

python中,对象的概念很广泛,一切内容都可以称为对象

创建类时用变量形式表示的对象属性称为数据成员成员属性

用函数形式表示的对象行为称为成员函数成员方法

一、类

1.类的定义与使用

# 定义类
class Car:
def info(self):
print("this is a car") # 使用类实例化对象
# 通过“对象.方法”访问其中的数据成员或成员方法
car = Car()
car.info() out:
this is a car # 使用 isinstance测试某个对象是否为某个类的实例
isinstance(car,Car) out:
True # 关键字 pass,类似于空语句
# 占位,预留函数空间
class Car:
def info(self):
print("this is a car")
def color(self):
pass

2.类成员与实例成员

实例属性,一般指在构造函数__init__ 中定义的,定义和使用时必须以self做为前缀

类属性,在类中所有方法之外定义的数据成员

在主程序中(或类的外部),实例属性属于实例(对象),只能通过对象名访问,

而类属性属于类,可以通过类名或对象名访问

--------------------------------------------------------------------

在Python中,可以动态地为类和成员增加成员,体现了python的动态类型

--------------------------------------------------------------------

class Car:
price = 10000 # 定义类属性
def __init__(self,c): # 构造函数
self.color=c # 定义实例属性 car1 = Car("red")
car2 = Car("blue")
print(car1.color,Car.price) Car.price = 11100 # 修改类属性
Car.name = 'bird' # 增加类属性
car1.color = "yellow" # 修改实例属性
print(car2.color, Car.price, Car.name)

函数与方法有区别,方法一般指与特点实例绑定的函数

 # 动态为对象增加成员方法
class Demo:
pass
t=Demo()
def test(self,v)
self.value = v t.test = test # 增加成员方法 test
t.test(t,20) print(t.value) out:
20

3. 私有成员与共有成员

python并不提供对私有成员严格的访问保护机制,

在定义类的属性时,如果属性名以两个下划线 __ 开头,表示私有属性

私有属性在类的外部不能直接访问,需要通过调用对象的公有成员方法来访问

公有属性可以公开使用,既可以在类的内部访问,也可以在外部程序中使用

----------------------------------------------------

使用下划线作为变量名和方法名前缀和后缀,表示类的特殊成员

_xxx 保护成员,只有类对象和子类对象才能访问

__xxx__ 系统定义的特殊成员

__xxx 类中的私有成员

# 特殊成员定义与访问
class Fruit:
def __init__(self):
self.__color='red' # 私有成员
self.__type__='rectangle' # 特殊成员
self.price = 1 # 公有成员 apple = Fruit()
print(apple.price) # 对象公有数据成员的值 out:
1
apple.price = 2 # 修改对象公开数据成员的值
print(apple.price) out:
2 apple.__type__ = 'Triangle' # 修改特殊成员的值
print(apple.__type__) out:
Triangle

python程序设计——面向对象程序设计:类的更多相关文章

  1. 【转】Python之面向对象与类

    [转]Python之面向对象与类 本节内容 面向对象的概念 类的封装 类的继承 类的多态 静态方法.类方法 和 属性方法 类的特殊成员方法 继承层级关系中子类的实例对象对属性的查找顺序问题 一.面向对 ...

  2. Python之面向对象新式类和经典类

    Python之面向对象新式类和经典类 新式类和经典类的继承原理: 在Python3中,就只有新式类一种了. 先看Python3中新式类: 类是有继承顺序的: Python的类是可以继承多个类的,也就是 ...

  3. Python之面向对象元类

    Python之面向对象元类 call方法: class People: def __init__(self,name): self.name=name # def __call__(self, *ar ...

  4. python的面向对象和类

    目录 一.基本知识点 1.面向过程编程 2.面向对象编程 3.注意 二.类的结构 1.类的理解 2.代码形式 3.类和函数的一些区别 4.类中的数据 5.类中的方法(基础) 三.类的实例化 四.类的继 ...

  5. python基础--面向对象基础(类与对象、对象之间的交互和组合、面向对象的命名空间、面向对象的三大特性等)

    python基础--面向对象 (1)面向过程VS面向对象 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. ...

  6. Python中面向对象和类

    目录 面向对象 类的定义 类的访问 类的属性和方法 继承和多态 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的. 面向对象: 类(C ...

  7. Python基础-面向对象初识--类

    什么是类 具有相似功能和属性的一类实物 什么是对象 类的具体体现,具体到一个 面向对象的优势 1.类是一组相似功能的集合,使组织结构更加清晰和规范化 2.研究面向对象要有上帝的思维,用面向对象设计程序 ...

  8. python程序设计——面向对象程序设计:继承

    继承是为代码复用和设计复用而设计的 在继承关系中,已有的.设计好的类称为父类或基类,新设计的类为子类或派生类 派生类可以继承父类的公有成员,但不能继承其私有成员 如果需要在派生类中调用基类的方法,可以 ...

  9. python程序设计——面向对象程序设计:方法

    类中定义的方法分为四类:公有方法,私有方法,静态方法,类方法 公有方法.私有方法都属于对象,私有方法的名字以"__"开始 每个对象都有自己的公有方法和私有方法,这两类方法可以访问属 ...

随机推荐

  1. HDU 1029 Ignatius and the Princess IV (map的使用)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1029 Ignatius and the Princess IV Time Limit: 2000/10 ...

  2. 微信小程序获取手机信息

    wx.getSystemInfo({ success: function (res) { console.log(res.model)//手机型号 console.log(res.pixelRatio ...

  3. react系列(四)Redux基本概念和使用

    Redux基本概念和使用 先从Flux开始 先放一个Flux官网的链接.需要fq. Flux是Facebook提出的一种构建客户端网页应用的应用架构,它是一种抽象程度很高的设计模式,鼓励单向数据流. ...

  4. 启动tomcat的时候为啥你启动的是8,启动起来的确实其他的Tomcat

    如果发现,是启动tomcat的时候为啥你启动的是8,启动起来的确实其他的Tomcat ,你可以去看看你的环境变量,是不是配了一个tomcat,

  5. mysql_config_editor的使用

    从Mysql5.6.6 开始mysql_config_editor允许存储加密的身份验证文件.mylogin.cnf 如果不想每次登录服务器都输入数据库的密码可以使用该功能 mysql_config_ ...

  6. 安装mysql zip 安装包 Navicat连接

    笔者在安装mysql时一直出现各种问题,今天难得成功一次,决定记录一下,留作纪念与参考 安装第一步,下载mysql https://dev.mysql.com/downloads/mysql/ 以在w ...

  7. 【小尝试】Java获取慕课网原有路径课程列表

    作为一个老慕课网(https://www.imooc.com/)粉丝,还记得最开始的慕课网有很多免费的路径课程,练习什么的也特别详细,是入门一门语言的好方法. 现在慕课网发展起来了收费模式,添加了很多 ...

  8. 关于因为git仓库无法克隆的问题;

    有时候会遇见一种情况: 在git clone 时,遇见断开连接或者无法连接git源仓库:连接超时的时候: git clone url(git 仓库源) --depth=n   // n 为想要克隆的层 ...

  9. 引入类型struct(结构),提高代码的逻辑性和可读性

    创建一个新类型(struct, 即 结构)SComplex 来表示复数,提高了代码的逻辑性和可读性,代码更加的简洁. #include "stdafx.h" #include &q ...

  10. 小白CSS学习日记-----杂乱无序记录(3)

    1.后代选择器 .antzone li { } class='antzone' 所有子孙后代中的li   2.子选择器 .antzone > li { } class='antzone' 的子一 ...