三大编程范式

  1.面向过程
  2.函数式
  3.面向对象
  注意 编程范式没有高低之分,只有适用不适用.

面向对象编程:

  编程是程序源用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程,一个程序是程序员为了得到一个任务结果而编写的一组指令的集合 ,正所谓条条大道通罗马,实现一个任务的方式很多种不同的方式,对这些不同的编程方式的特点进行归纳总结得出来的编程方式类别,即为编程范式。不同的编程范式本质上代表对各种类型的任务采取的不同的解决问题的思路,大多数语言只支持一种编程范式,当然有些语言可以同时支持多种编程范式,两种最重要的编程范式分别是面向对象和面向对象过程。
oop编程是利用“类”和“对象”老创建各种模型来实现对真是世界的描述,使用面向对象编程的原因一方面是因为它可以使程序的维护和扩展变得更简单,并且可以大大提高程序开发效率,另外,基于面向对象的程序可以使它人更容易理解你的代码逻辑,从而使团队开发变得更加从而。

面向对象的几个核心特性如下:

object对象

  一个对象即是一个类的实例化后实例,一个类必须经过实例化后方可在程序中调用,一个类可以实例化多个对象,每个对象亦可有不同的属性,就像人类是指所有人,每个人是指具体的对象,人与人之前有共性,亦有不同。

encapsulation封装(类)

  在类中对数据的复制、内部调用对外部用户是透明的,这使类变成了一个胶囊或容器,里面包含看类的数据和方法。

inheritance继承:

  一个类可以派生出子类,在这个父类里定义的属性、方法自动被子类继承。

类的特殊方法以及定义:

#类的特殊方法以及定义:

#类声明:驼峰命名
# class Class_Name(object):
# '''__doc__ 的特殊属性.文档属性'''
#
# #类的初始化方法:(这个方法没有返回值,返回为None)
# def __init__(self,name):
# self.name = name #实例化的初始化字典:
# print(abc.__dict__) #属性字典(类特殊属性*****)
# print(Class_Name.__dict__) #文档属性(类特殊属性*****)
# print(Class_Name.__doc__) #类的名字(类特殊属性)
# print(Class_Name.__name__) #类的起始继承(类特殊属性)
# print(Class_Name.__bases__) #类的模块(类特殊属性)
# print(Class_Name.__module__)

实例化相关:

# 实例化章节

# question-1:
# 有人说,类有数据属性和函数属性,实例对象是由类产生的,所以实例也有数据属性和函数属性?
#错误!
# question-2:
# 实例由类产生的,所以实例肯定能访问类属性?
#错误! #实例化的对象本身没有函数方法,其函数方法是只是引用类的函数方法.
#实例化对象的作用域属性为class类中init的属性,当访问的属性没有时,它会向class类的作用域中找访问的属性(类的作用域). #实例化:
# class Class_Name(object):
# def __init__(self,name):
# self.name = name
# def A(self):
# return "AAA"
#
# abc = Class_Name('XA')
# print(Class_Name.__dict__)
# print(abc.__dict__) #question-3
#在类的属性定义中,加self 或 不加 self 的区别是什么?
# self ,界定了类的类属性和实例化属性.
#不加self,表示是类的一个属性(可以通过“类名.变量名”的方式引用)
#加self,表示是类的实例的一个属性(可以通过“实例名.变量名”的方式引用)
#
# class Class_Name(object):
# def __init__(self,name):
# self.name = name
# def A(self):
# return "AAA"
# def B():
# return "BBB"
# #实例化
# abc2 = Class_Name('X2')
# #实例化调用实例化属性:(正常输出)
# print(abc2.A())
# #实例化调用类的属性(报错)
# print(abc2.B())
# #类调用类属性:(正常输出)
# print(Class_Name.B())

类属性操作:

# 类属性操作:
# class A(object):
# a = 123 # #查看类的属性:
# print(A.a)
#
# #修改类的属性:
# A.a = 321
# print(A.a)
# print(A.__dict__)
#
# #增加类的属性:
# A.b = 111111
# print(A.b)
# print(A.__dict__)
#
# #删除
# del A.b
# print(A.__dict__) #**********************************
# 类函数属性操作:(定义类函数方法时不要加self,加self就是实例化属性了)
# class A(object):
# def AA():
# print("aa") #查看类的函数属性:(输出:aa)
# A.AA() #修改类的函数属性:(输出:BB)
# def BB():
# print('BB')
#
# A.AA = BB
# A.AA() #删除类的函数属性:
# print(A.__dict__)
# del A.AA
# print(A.__dict__) #增加类的函数属性
# def CC():
# print('CC')
# print(A.__dict__)
# A.CC = CC
# print(A.__dict__)

实例属性操作:

#实例属性操作:
class A(object):
a = 123
def __init__(self,name):
self.name = name
def B(self):
print("BB") #实例化:
AA = A('anec') #查看实例字典
print(AA.__dict__)
#查看实例属性:
print(AA.name)
#查看实例函数属性:
print(AA.B)
AA.B() # #增加一个实例属性
AA.C = 123
print(AA.__dict__)
print(AA.C) #增加一个实例函数属性:(可以做到,但不建议这种操作)
# def D():
# print("DD")
# AA.D = D
# print(AA.__dict__)
# print(AA.D)
# AA.D() #不要修改底层的属性字典(可以做到,但不建议这种操作)
# AA.__dict__['E'] = "EE"
# print(AA.__dict__)
# print(AA.E) #修改实例属性
AA.name = "xiaohong"
print(AA.__dict__)
print(AA.name) #删除实例属性
del AA.name
print(AA.__dict__)

对象、实例、全局变量 关系:

例一:

# 例一:
class Chinese:
country = "china"
def __init__(self,name):
self.name = name p1 = Chinese('anec')
print(p1.country)
p1.country = "美国"
print(Chinese.country)
print(p1.country)
#上面输出结果是???
# 结果为:
# china
# china
# 美国
#p1自身没有函数属性,所以第一个p1是类的country : china
#类访问自身的属性country :china
#p1定义了一个新的country属性,p1访问country属性时,发现自身有这个属性所以:美国

例二:

#例二:
country = "中国"
class Chinese:
country = "湖南"
def __init__(self,name):
self.name = name
print(country)
p1 = Chinese('anec') print(p1.country)
print(Chinese.country)
#输出结果为?????
# 中国
# 湖南
# 湖南
#1.这里要注意类和实例访问属性都是通过 类名/实例名.属性/函数属性 的形式访问的,
#2.这里print(country)没有以上的方法调用,所以访问的是全局的变量值
#3.init在实例化之前执行,所以输出了中国,而后两个打印都是访问的类的属性.

例三:

# 例三:
class Chinese:
xx = ['a','b']
def __init__(self,name):
self.name = name p1 = Chinese('anec')
p2 = Chinese('anec2') p1.xx = [1,2,3]
print(Chinese.xx)
print(p1.xx)
print(p1.__dict__) print("*"*20) p2.xx.append("C")
print(Chinese.xx)
print(p2.xx)
print(p2.__dict__) # 结果:
# ****************
# ['a', 'b']
# [1, 2, 3]
# {'name': 'anec', 'xx': [1, 2, 3]}
# ********************
# ['a', 'b', 'C']
# ['a', 'b', 'C']
# {'name': 'anec2'}
# ****************
#注:
# p1是新增了一个xx属性,所以在p1.__dict__中新增了一个属性xx
# p2 并没有新增属性,而是在类的属性上新增一个元素,所以类属性增加了元素,p2__dict__中没有新增属性

python - class类 (一)的更多相关文章

  1. Python笔记——类定义

    Python笔记——类定义 一.类定义: class <类名>: <语句> 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性 如果直接使用类名修改其属 ...

  2. 【python】类中的self

    在python的类中,经常会写self,代表对象自己.如下例: #coding=utf-8 class Foo: def __init__(self, name): self.name = name ...

  3. python基础——类和实例

    python基础——类和实例 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都 ...

  4. python(6)-类

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

  5. 从C#到Python —— 4 类及面向对象

    http://www.cnblogs.com/yanxy/archive/2010/04/04/c2p_4.html 如果你熟悉C#,那么对类(Class)和面向对象(Object Oriented) ...

  6. Python type类具体的三大分类:metaclasses,classes,instance

    Python type类视角中的对象体系需要我们不断的学习,其中我们使用的时候需要注意.下面我们就看看如何才能更好的运用Python type类.下面的文章希望大家有所收获. 在单纯的Python t ...

  7. python元类分析

    刚開始接触到Python新式类中的元类的概念的时候非常是纠结了下..不知道这是个啥东西... 用下面几个定义来说明吧: (1)Python中,类也是对象..仅仅只是这样的对象比較的特殊,他用于创建别的 ...

  8. Python用类实现串以及对串的方法进行单元测试

    串是一种常见的数据结构,这里使用Python定义类来实现相应的方法.先看代码,再对相关知识进行讲解. # coding=utf-8 __all__=['ADTString'] class ADTStr ...

  9. Python基础-类

    Python基础-类 @(Python)[python, python基础] 写在前面 如非特别说明,下文均基于Python3 摘要 本文重点讲述如何创建和使用Python类,绑定方法与非绑定方法的区 ...

  10. 谨慎修改Python的类属性

    Python的类和类实例都是可变对象,可以随时给属性赋值,并且在原处修改. 在对类属性进行修改时需要特别小心,因为所有的类实例都继承共享类属性,除非实例本身存在和类属性同名的属性.对类属性进行修改,会 ...

随机推荐

  1. [代码]--c#实现屏幕取词源码下载

    最近公司有一个 项目需要实现类似于金山词霸,有道词典等的屏幕取词功能,准确来说是划词功能,网上搜了各种屏幕取词无外乎就两种: A.金山词霸组件法 B.Nhw32.dll法 百度搜到的重复内容真的太多了 ...

  2. ansible系列6-用户管理

    第一种:新增用户 ansible host -m user -a "name=zhang shell=/bin/bash groups=admin,root append=yes home= ...

  3. Educational Codeforces Round 4 B. HDD is Outdated Technology

    题目链接:http://codeforces.com/problemset/problem/612/B 解题思路: 一开始看错了题意,他要求的是从1-n所耗费的时间,n表示的是数值而不是下标, 实现代 ...

  4. MT【235】两道函数题

    已知$g(x)=x^2-ax+4a$,记$h(x)=|\dfrac{x}{g(x)}|$,若$h(x)$在$(0,1]$上单调递增,求$a$的取值范围. 解答: 已知$$g(x)=\begin{cas ...

  5. 自学Aruba7.1-Aruba安全认证-WPA2-PSK认证(web页面配置)

    点击返回:自学Aruba之路 自学Aruba7.1-Aruba安全认证-WPA2-PSK认证(web页面配置) 步骤1 建立AP Group,命名为test-group 步骤2  将AP加入到AP G ...

  6. 【BZOJ2427】[HAOI2010]软件安装(动态规划,Tarjan)

    [BZOJ2427][HAOI2010]软件安装(动态规划,Tarjan) 题面 BZOJ 洛谷 题解 看到这类题目就应该要意识到依赖关系显然是可以成环的. 注意到这样一个性质,依赖关系最多只有一个, ...

  7. Web Performance and Load Test Project错误集

    当我们创建Web Performance and Load Test Project时,经常会遇到下面这些问题: 1. 当点击Add Recording时, 左边的record tree没有出现: 解 ...

  8. Best Time to Buy and Sell Stock - LeetCode

    目录 题目链接 注意点 解法 小结 题目链接 Best Time to Buy and Sell Stock - LeetCode 注意点 在卖出之前必须要先购入 解法 解法一:遍历一遍,随时记录当前 ...

  9. yum 安装Mysql

    RHEL6.5-MySql-yum安装登录 客户端工具的使用mysql:Linux下提供了一个访问mysql服务器的客户端工具—mysql,其由mysql软件包提供,除了这些工具之外还有一些图形化界面 ...

  10. [FJOI2017]矩阵填数——容斥

    参考:题解 P3813 [[FJOI2017]矩阵填数] 题目大意: 给定一个 h∗w 的矩阵,矩阵的行编号从上到下依次为 1...h ,列编号从左到右依次 1...w . 在这个矩阵中你需要在每个格 ...