引子:类的对象在内存中的表示
def dog(name,dog_type):
def bark(d):
print(d,'wang wang wang ...')
data = {
'name':name,
'type':dog_type
'bark':bark
}
调用方法:
d1 = dog('小哈','哈士奇')
d1['bark'](d1)

可以阻止不同类型角色的方法混用
但是同类角色也有不同的地方,这时候快速开发等等需要引入面向对象的概念
对象间复杂的关系描述,有相同点也有不同点。需要面向对象的思想

1.类 略
2.对象 略
3.封装
作用防止内部对象数据不能被外部随意修改
使外部程序不需要关注对象内部的构造,只需要通过对象对外提供的接口进行访问
4.继承
5.多态
“一个接口,多种实现”

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

class Dog(object):
country = 'JP' #全局变量,通过类修改后,所有对象全改,通过对象修改只是单个对象改了
def __init__(self,name):
self.NAME = name #成员属性
def sayhi(self):
print('hello, I am a dog',self.NAME)

self表示对象本身,NAME为类的成员属性

d = Dog("a") # Dog(d,"a")
d2 = Dog("b")

类-->实例化--->实例对象
__init__ #构造函数
self.name = name #成员属性
def sayhi() #方法
* 私有属性外部不能直接访问,两个下划线定义,属于该对象内部私有。
self.__heart = "Normal"
如果想让私有属性只能被读 不能被改可以
def get__heart(self):
return self.__heart
强制访问私有属性:r1._Role__heart r1对象名,Role类名,__heart私有属性
* 公有属性:所有属于该类的对象都可以访问的属性,属于该类。(常量)country
实例化之前就已经存在,可以通过 类名.共有属性去访问
通过类名去改country,那么以后所有通过对象去访问的country都改了
通过某实例去改,实际是在r1内存中加了一个country
r1.country=CN 只有r1对象改了,其他没有变还是JP

* 成员属性,self.NAME等属性,属于对象本身。

注意:country,sayhi在内存中只有一份,对象调用的时候都是把对象的引用传给类中的方法调用。

可以看出方法也是公有的。例如sayhi只有一份。
如果要改成私有方法(每个对象单独的一份)需要:
def private(self):
print("private")
r1.sayhi = private
r1.sayhi(r1)

python面向对象的特点,类定义等,私有属性、公有属性、成员属性的更多相关文章

  1. Python面向对象总结及类与正则表达式

    Python3 面向对象 一丶面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 方法:类中定义的函数. 类变 ...

  2. Python面向对象之接口类(抽象类)

    Python面向对象之接口类(抽象类):就是制定一个规范. 比如定义了一个接口类(抽象类)(他们是不可以进行实例化的,这就是他为什么是制定一个规范的原因). 他的定义是需要abc模块,要变的就是他的方 ...

  3. Python面向对象06 /元类type、反射、函数与类的区别、特殊的双下方法

    Python面向对象06 /元类type.反射.函数与类的区别.特殊的双下方法 目录 Python面向对象06 /元类type.反射.函数与类的区别.特殊的双下方法 1. 元类type 2. 反射 3 ...

  4. Python面向对象 --- 新旧式类、私有方法、类属性和类方法、静态方法

    一.Python面向对象中的新旧式类 1)新式类(推荐使用):在定义类时,类后边括号里要继承基类(object).在python3.x中若没有指定父类,会默认使用的是object作为基类:在pytho ...

  5. Python面向对象1:类与对象

    Python的面向对象- 面向对象编程 - 基础 - 公有私有 - 继承 - 组合,Mixin- 魔法函数 - 魔法函数概述 - 构造类魔法函数 - 运算类魔法函数 # 1. 面向对象概述(Objec ...

  6. python面向对象 : 抽象类(接口类),多态,封装(私有制封装)

    一. 抽象类(接口类) 与java一样, python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的类, 它的特殊之处在于只能被继承, 不能被实例化. 从设计角度去看, 如果类是从现实对 ...

  7. Python面向对象编程、类

    一.面向对象编程 面向对象--Object Oriented Programming,简称oop,是一种程序设计思想.在说面向对象之前,先说一下什么是编程范式,编程范式你按照什么方式来去编程,去实现一 ...

  8. python 面向对象专题(五):私有成员、类方法、静态方法、属性、isinstance/issubclass

    https://www.cnblogs.com/liubing8/p/11325421.html 目录 Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/issubc ...

  9. Python面向对象-概念、类、实例

    OOP——Object Oriented Programming,面向对象编程,是一种程序设计思想.该思想将对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 区别于面向过程的程序设计即把计 ...

  10. python面向对象的多态-类相关内置函数-类内置魔法函数-迭代器协议-上下文管理-04

    多态 一种事物具备不同的形态 例如:水 --> 固态.液态.气态 多态:# 多个不同对象可以相应同一个对象,产生不同的结果 首先强调,多态不是一种特殊的语法,而是一种状态,特性(多个不同对象可以 ...

随机推荐

  1. 4.8 Using Ambiguous Grammars

    4.8 Using Ambiguous Grammars It is a fact that every ambiguous grammar fails to be LR and thus is no ...

  2. 2008提权之突破系统权限安装shift后门

    大家都知道08权限的系统权限设置很严格,且在2003系统中常用到的溢出工具都失效.面对限制IP连接的情况 我们及时拿到system权限 有账号也上不去 这种情况下只能弄shift后门 或者放大镜了.但 ...

  3. "git rm" 和 "rm" 的区别(转载)

    转自:http://yang3wei.github.io/blog/2013/02/03/git-rm-he-rm-de-qu-bie/ 这是一个比较肤浅的问题,但对于 git 初学者来说,还是有必要 ...

  4. 最常用的~正则表达式-相关js函数知识简洁分享【新手推荐】

    一.正则表达式的创建 JS正则的创建有两种方式: new RegExp() 和 直接字面量. //使用RegExp对象创建 varregObj =newRegExp("(^\s+)|(\s+ ...

  5. bzoj 4326: NOIP2015 运输计划【树链剖分+二分+树上差分】

    常数巨大,lg上开o2才能A 首先预处理出运输计划的长度len和lca,然后二分一个长度w,对于长度大于w的运输计划,在树上差分(d[u]+1,d[v]+1,d[lca]-2),然后dfs,找出所有覆 ...

  6. lodop打印图片

    LODOP = getLodop(document.getElementById('LODOP_OB'), document.getElementById('LODOP_EM')); //LODOP. ...

  7. 浅谈算法——splay

    BST(二叉查找树)是个有意思的东西,种类巨TM多,然后我们今天不讲其他的,我们今天就讲splay 首先,如果你不知道Splay是啥,你也得知道BST是啥 如上图就是一棵优美的BST,它对于每个点保证 ...

  8. Java compiler level does not match the version of the installed Java project facet问题处理

    从SVN上下载应用后在Problems面板中提示以下错误信息: Java compiler level does not match the version of the installed Java ...

  9. 百度地图API显示多个标注点带提示的代码 / 单个标注点带提示代码

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  10. Oracle数据库数据显示乱码问题解决方法。

    一.问题描述:       在将其它数据库的数据导出文件导入本地新建数据库时,所导入的数据全部是乱码,一般表现为数据表中列的值类似于"?????",即内容大部分为?的表现形式.初步 ...