一、定义

面向对象是一种编程方式,此编程方式的实现是基于对  和 对象 的使用

类:一个种类,一个模型。
对象:指具体的东西,模型造出来的东西叫做对象。
实例:实例和对象是一样的。
实例化:实例化就是造东西的这个过程。
属性:就是变量
方法:就是类里面的函数

类的定义:

class Person:  #类
def __init__(self):#构造函数
self.name = 'zhang'
self.nose = 2 # #公有属性 def driver(self):#方法
print('老司机,开车非常稳') p=Person()#实例化,p就是实例即对象
print(p.name)#实例化对象可调用类的公共属性
p.driver()#实例化对象可调用类的公共方法

二、构造函数:

__init__(self)  这个是构造函数。可写可不写。当类实例化的时候,最先执行构造函数。构造函数也可带参数。如果构造函数带参数,则在实例化的时候,就要带参数

class Person:  #类
def __init__(self,age):#带参数的构造函数
self.name = 'zhang'
self.nose = 2 # #公有属性
self.age=age
p=person(18)#实例化,必须将age的值带过去
print(p.age)#打印18

三、self

self代表的是本类对象。因为函数里面的变量都是局部变量,出了函数就不能用了。
用self给对象绑定了之后,就可以self.xx随便用了

class Person:  #类
def __init__(self,age):#带参数的构造函数
self.name = 'zhang'
self.nose = 2 # #公有属性
self.age=age
def haha(self):
print(self.nose)#可直接用self.nose使用构造函数中的变量,会打印出2 p=Person(18)

四、私有属性和方法

私有属性和方法的定义,在前面加上两个横。私有属性和方法只能在类内部调用。出了类体就不能再调用

class Person:  #类
def __init__(self):#构造函数
self.name = 'zhang'
self.nose = 2 # #公有属性
self.__ear=2#私有属性,变量前加__ def driver(self):#方法
print('老司机,开车非常稳')
def __eat(self):#私有方法
print('吃。。。。。。。。。') p=Person()#实例化,p就是实例即对象
print(p.__ear)#报错
p.__ear()#报错,私有方法只在类内有效,出了类就无法调用

五、属性方法

看起来像属性的方法。跟普通方法的区别:在方法前加上@property。调用的时候像调用属性一样,不用加括号

class Baby():
#没有构造函数
def my(self):
self.name = 'aaa'
def cry(self):#实例方法
print('哇哇哇') @property#属性方法
def hhh(self):
return 198
b=Baby()
b.cry()
print(b.hhh)#属性方法的调用跟调用属性一样,方法名后不加括号

六、类变量

可以直接通过类名来引用并操作的变量。实例也可引用操作,但是实例并不是实际改变类变量的值

类变量直接在类内部定义(不要定义到函数体中)

class Baby():
country = 'China' #类变量,公共的变量,每个实例都可以用
def my(self):
self.name = 'aaa'
def cry(self):#实例方法
print('哇哇哇')
print(self.country)#函数调用类变量时,要用self.xxx
b=Baby()
b.country='zhongguo'#实例对象修改类变量的值
print(b.coutry)#打印出zhongguo
print(Baby.country)#类直接调用类标量,仍旧是原值china,并没有改变
Baby.country='japan'#类变量可通过 类.xxx=xx修改
print(Baby.country)#打印出japan

七、类方法

类方法不仅可以直接用实例调用,也可以直接用类名调用。类方法的定义需要在普通方法前加上@classmethod

class Baby():
country='china'#类变量,公共变量,所有实例化对象都可用
# def __init__(self):#构造函数不是必须写的
# print(id(self))
# self.name=name
def cry(self):#带self的方法,叫实例方法.必须先实例化后才能调用
print('哇哇啊啊')
print(self.xiaoming())#调用类方法时,必须用self.xxx @property#加上这句,将函数定义为属性方法,当做变量用。不能加入参
def hhh(self):
return 198 @classmethod
def xiaoming(cls):#cls代表本类,这个是类方法
print(cls.country)
print('我是类方法') b=Baby()
b.xiaoming()#实例对象调用类方法
Baby.xiaoming()#类名直接调用类方法

八、静态方法

#静态方法就是一个普通的函数,只不过就是写在类中,不能用类变量,类方法,也用不了实例方法,实例变量。。静态方法的定义在普通方法前加上@staticmethod
class Byby():
@staticmethod
def xiaohei():
print('这个是静态方法,它和一个没卸载类里面的函数一样')

九、析构函数

析构函数在实例销毁时执行,一般用作最后的善尾工作。比如在数据库操作中,可以将关闭操作都放在析构函数中,当程序全部执行的时候,会自动地执行析构函数,将数据库连接关闭

析构函数也是非必写

import pymysql
class MyDb(object):
def __del__(self):#析构函数不是必写的
#析构函数
self.cur.close()#将数据库关闭操作放在析构函数。在程序执行完毕后,会执行析构函数
self.conn.close()#
print('over....') def __init__(self,host,user,password,db,port=3306,charset='utf8'):
try:
self.conn=pymysql.connect(host=host,user=user,password=password,port=port,charset=charset,db=db,autocommit=True)
#autocommit 在执行insert,update,delete语句时可以自动提交commit
except Exception as e:
print('数据库连接失败%s'%e)
else:
self.cur=self.conn.cursor(cursor=pymysql.cursors.DictCursor) def ex_sql(self,sql):
try:
self.cur.execute(sql)
except Exception as e:
print('sql语句有问题%s'%sql)
else:
self.res=self.cur.fetchall()
return self.res my=MyDb('127.0.0.1','root','','db')
my.ex_sql('select * from stu;')
print('最后一行......')#程序自上向下执行,这一行代码执行完毕后,程序结束,此时就会执行析构函数 #所以最终会看到打印结果中显示:
最后一行......
over......

十、if  __name__ == '__main__':

作用:

1、判断这个python文件是在别的地方导入的,还是直接运行这个python文件

2、这句话一般是做测试的时候用的,直接执行该句话所在的文件,加与不加没有任何区别

3、但是如果在别的文件import该文件,则main下的所有代码不会被执行

假设文件aa.py中代码如下:

print(__name__)#直接执行该文件,会打印出__main__。但是如果在别的文件import该文件,这句话回打印出当前文件的文件名
if __name__ == '__main__':# 直接运行当前python文件,main 写这里并没有什么用。写与不写一样#但是如果在别的python中导入当前python文件,那么main下的代码不会被执行
print('测试。。。。。。。。')

以上代码,如果直接运行所在py文件,则会打印出:

__main__

测试。。。。。。

如果在文件b.py中import aa.py,执行结果:

aa    #直接打印出aa.py的文件名。同时不会执行if__name__=='__main__' 下的代码

十一、经典类和新式类区别

#经典类和新式类在python2中有区别,在python3中没有任何区别

#python2中,在多继承时,一个是深度优先,一个是广度优先

python基础:面向对象的更多相关文章

  1. python基础——面向对象编程

    python基础——面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...

  2. python基础——面向对象进阶下

    python基础--面向对象进阶下 1 __setitem__,__getitem,__delitem__ 把对象操作属性模拟成字典的格式 想对比__getattr__(), __setattr__( ...

  3. python基础——面向对象进阶

    python基础--面向对象进阶 1.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 ...

  4. python基础——面向对象的程序设计

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

  5. Python 基础 面向对象之二 三大特性

    Python 基础 面向对象之二 三大特性 上一篇主要介绍了Python中,面向对象的类和对象的定义及实例的简单应用,本篇继续接着上篇来谈,在这一篇中我们重点要谈及的内容有:Python 类的成员.成 ...

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

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

  7. Python自动化 【第七篇】:Python基础-面向对象高级语法、异常处理、Scoket开发基础

    本节内容: 1.     面向对象高级语法部分 1.1   静态方法.类方法.属性方法 1.2   类的特殊方法 1.3   反射 2.     异常处理 3.     Socket开发基础 1.   ...

  8. python基础-面向对象编程

    一.三大编程范式 编程范式即编程的方法论,标识一种编程风格 三大编程范式: 1.面向过程编程 2.函数式编程 3.面向对象编程 二.编程进化论 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 ...

  9. 第八章:Python基础の面向对象(二)

    本課主題 面向对象的多态 面向对象的成员 成员修饰符 特殊成员 面向对象其他应用 异常处理 设计模式与单例模式 面向对象的多态 指定参数类型只是多态的一种表现 另外一种是允许自己类型和自己的子类型(典 ...

  10. python基础-面向对象(装饰器)

    属性:   @property   @method_name.setter   @method_name.deleter   三个标签都是放在方法的上面来使用,且方法名要和后续使用的   变量名字相一 ...

随机推荐

  1. JAVA—继承及抽象类

    继承的概念 在Java中,类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作子类,现有类被称作父类,子类会自动拥有父类所有可继承的属性和方法. 与css中继承父元素属性类似 继承的 ...

  2. C#LeetCode刷题之#257-二叉树的所有路径(Binary Tree Paths)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4082 访问. 给定一个二叉树,返回所有从根节点到叶子节点的路径. ...

  3. C#LeetCode刷题之#860-柠檬水找零(Lemonade Change)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4036 访问. 在柠檬水摊上,每一杯柠檬水的售价为 5 美元. 顾 ...

  4. 《闲扯Redis十》Redis 跳跃表的结构实现

    一.前言 Redis 提供了5种数据类型:String(字符串).Hash(哈希).List(列表).Set(集合).Zset(有序集合),理解每种数据类型的特点对于redis的开发和运维非常重要. ...

  5. SourceTreet提交时显示remote: Incorrect username or password ( access token )(4种解决办法)

    引言 我因为第一次安装Sources Tree的时候进行破解时(跳过安装时的登录),因为操作失误造成了好多bug,导致Sources Tree不论提交,拉取,获取,都会报remote: Incorre ...

  6. LeetCode 309 Best Time to Buy and Sell Stock with Cooldown 解决方案

    题目描述 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 .​ 设计一个算法计算出最大利润.在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 你不能同时参与多笔 ...

  7. Spring Boot系列(一):Spring Boot快速开始

    一.Spring Boot介绍 Spring Boot可以很容易的创建可直接运行的独立的基于Spring的应用程序. 功能特点: 创建独立的Spring应用程序: 直接嵌入Tomcat.Jetty等W ...

  8. DDD与Repository

    Repository已经不是什么新鲜概念了.DDD模型自2004年提出,发展至今已经16年了.但是不少企业却无法实施,其原因也很简单:DDD是基于需求的,而很多并不理解需求:DDD是容易实现的,而很多 ...

  9. SpringBoot 集成SpringSecurity JWT

    目录 1. 简介 1.1 SpringSecurity 1.2 OAuth2 1.3 JWT 2. SpringBoot 集成 SpringSecurity 2.1 导入Spring Security ...

  10. Windows server 2008R2 中sql server的搭建

    一.安装sql server Step1:下载sql server 2008 r2 standard,解压到Windows的C:\下. Step2:打开安装程序,进行sql server的安装 Ste ...