一、简介

面对过程编程: 根据操作数据的函数或语句块来设计程序。

面对对象编程:把一些函数,数据,方法和功能结合起来,用“对象”包裹组织程序的一种方法。

类和对象是面向对象编程的两个主要方面。类创建一个新类型,而对象是这个类

的实例。

二、类的定义

Class 类名:

类体

在这个类的定义中,需要注意:

1. 类名必须符合“标识符”的规则;一般规定,首字母大写,多个单词使用“驼峰原则”。

2. 类体中我们可以定义属性和方法。

3. 属性用来描述数据,方法(即函数)用来描述这些数据相关的操作。

下面我们简单看一个类的定义

>>>class Student:
…    def __init__(self, name, age):   #构造方法第一个参数必须为self
…       self.name = name         #实例属性
…       self.age = age

…    def know(self):              #实例方法
…       print('my name is {},and I\'m {}'.format(self.name,self.age) )

>>>Student('wanger', 18).know()

my name is wanger,and I'm 18

三、__init__方法

__init__ 方法在类的一个对象被建立时,该方法在类实例化时会自动调用

__init__方法要注意:

1. 名称固定,必须为__init__(),起始和结束必须是双下划线。

2. 第一个参数固定,必须存在一个参数,一般为:self,self指刚创建好的实例对象。

3. 构造函数通常用来初始化实例对象的实例属性。

4.通过类名调用构造函数,类名调用即开始自动调用构造函数,一般为:类名(参数列表)

  • 实例属性和实例方法:

实例属性是从属于实例对象的属性,也称为“实例变量”。他的使用如下:

1. 实例属性一般在__init__()方法中通过如下代码定义:

self.实例属性名= 初始值

2. 在本类的其他实例方法中,也是通过self 进行访问:

self.实例属性名

3. 创建实例对象后,通过实例对象访问:

a = 类名()   #创建对象,调用__init__()初始化属性

a.实例属性名= 值   #可以给已有属性赋值,也可以新加属性

实例方法是从属于实例对象的方法。实例方法的定义格式如下:

def 方法名(self , 形参列表):

函数体

方法的调用格式如下:

对象.方法名(实参列表)

  • 类的方法

在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self, 且为第一个参数,self 代表的是类的实例。

#类定义

class People:

    # 定义基本属性

    n = 'Bob'

    a = 0

    # 定义私有属性,私有属性在类外部无法直接进行访问

    __w = 0

    # 定义构造方法

    def __init__(self, n, a, w):

        self.a = a

        self.__w = w

    def know(self):

        print("%s say: I’m  %d years old。" % (self.n, self.a))

# 实例化类

a = People('',18,50)

a.know()

输出结果为:Bob say: I’m  18 years old。(没有给a赋值则默认为基本属性里的值)

四、私有属性和私有方法

  • 类的私有属性

两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__参数名。

  • 类的私有方法

两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类的外部调用。

class Student:
# 定义基本属性
n = 'Bob'
a = 0
# 定义私有属性,私有属性在类外部无法直接进行访问
__w = 0 # 定义构造方法
def __init__(self, n, a, w):
self.n = n
self.a = a
self.__w = w def know(self):
#类内部可以直接调用
print('my weight is: ',Student.__w )
print("%s say: I’m %d years old。" % (self.n, self.a)) #定义私有方法
def __myself(self):
print('my weight is 55') my = Student('王二', 18 , 55)
print(my.n,my.a) #外部可以调用类属性
my.know() #调用定义方法
print(my._Student__w) #外部调用私有类属性的方法
my._Student__myself() #外部调用私有实例方法
  • 类的专有方法

__init__ : 构造函数,在生成对象时调用

__del__ : 析构函数,释放对象时使用

__repr__ : 打印,转换

__setitem__ : 按照索引赋值

__getitem__: 按照索引获取值

__len__: 获得长度

__cmp__: 比较运算

__call__: 函数调用

__add__: 加运算

__sub__: 减运算

__mul__: 乘运算

__truediv__: 除运算

__mod__: 求余运算

__pow__: 乘方

  • 属性和方法命名总结

_xxx:保护成员,不能用“from module import * ”导入,只有类对象和子类对象能访

问这些成员。

__xxx__:系统定义的特殊成员

__xxx: 类中的私有成员,只有类对象自己能访问,子类对象也不能访问。(在类外

部可以通过“对象名. _类名__xxx”这种特殊方式访问。)

07-Python面对对象初级的更多相关文章

  1. Python - 面对对象(基础)

    目录 Python - 面对对象(基础) 一. 概述 二. 创建类和对象 三. 面向对象三大特征 封装 继承 多态 Python - 面对对象(基础) 一. 概述 面向过程:根据业务逻辑从上到下写垒代 ...

  2. Python - 面对对象(进阶)

    目录 Python - 面对对象(进阶) 类的成员 一. 字段 二. 方法 三. 属性 类的修饰符 类的特殊成员 Python - 面对对象(进阶) 类的成员 一. 字段 字段包括:普通字段和静态字段 ...

  3. Python - 面对对象(其他相关,异常处理,反射,单例模式,等..)

    目录 Python - 面对对象(其他相关,异常处理,反射,等..) 一.isinstance(obj, cls) 二.issubclass(sub, super) 三.异常处理 1. 异常处理 2. ...

  4. 小学生绞尽脑汁也学不会的python(面对对象-----类与类之间的关系)

    小学生绞尽脑汁也学不会的python(面对对象-----类与类之间的关系 1. 依赖关系. 最轻的一种关系 在方法中引入另一个类的对象 class Elephant: def __init__(sel ...

  5. 小学生绞尽脑汁也学不会的python(面对对象-----成员)

    小学生绞尽脑汁也学不会的python(面对对象-----成员) 成员 class Person: def __init__(self, name, num, gender, birthday): # ...

  6. 16、python面对对象之类和继承

    前言:本文主要介绍python面对对象中的类和继承,包括类方法.静态方法.只读属性.继承等. 一.类方法 1.类方法定义 使用装饰器@classmethod装饰,且第一个参数必须是当前类对象,该参数名 ...

  7. 15、python面对对象之类和对象

    前言:本文主要介绍python面对对象中的类和对象,包括类和对象的概念.类的定义.类属性.实例属性及实例方法等. 一.类和对象的概念 问题:什么是类?什么是实例对象? 类:是一类事物的抽象概念,不是真 ...

  8. python面对对象编程------4:类基本的特殊方法__str__,__repr__,__hash__,__new__,__bool__,6大比较方法

    一:string相关:__str__(),__repr__(),__format__() str方法更面向人类阅读,print()使用的就是str repr方法更面对python,目标是希望生成一个放 ...

  9. python面对对象编程----2:__init__

    面对对象编程估计我们最早接触到的就是__init__了,也就是实例的初始化处理过程: 1:来看看最基础的__init__ class Card(object): #抽象类Card,并不用于实例化 de ...

  10. python面对对象

    面对过程VS面对对象 面向过程的程序设计的核心是过程,过程就是解决问题的步骤,面向过程的设计就是考虑周全什么时候处理什么东西 优点:极大的降低了写程序的复杂度,只需要顺着要执行的步骤,堆叠代码即可. ...

随机推荐

  1. Codeforces Round #648 (Div. 2)

    链接 : https://codeforces.com/contest/1365/problems problem A 统计可用的行和列的最小值, 模2输出即可 /* * Author: RoccoS ...

  2. 【JMeter_05】创建第一个简单的接口脚本

    聚合数据:提供了很多开放的API,可以去练习使用https://www.juhe.cn/ 如果有小伙伴对HTTP协议不是很了解,可以看下这里 http://home.ustc.edu.cn/~xie1 ...

  3. 《Redis开发与运维》

    第1章 初识Redis 1. Redis介绍: Redis是一种基于键值对(key-value)的NoSQL数据库. 与很多键值对数据库不同的是,Redis中的值可以是由string(字符串).has ...

  4. cb09a_c++_顺序容器的操作2-在顺序容器中添加元素_插入数据

    cb09a_c++_顺序容器的操作2在顺序容器中添加元素vector不能向前插入数据,list可以用insertc.push_back(t);c.push_front(t);c.insert(p,t) ...

  5. TopK问题,数组中第K大(小)个元素问题总结

    问题描述: 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 面试中常考的问题之一,同时这道题由于解法众多,也是考察时间复杂 ...

  6. CSV文件导入到数据库中读取数据详解(接着上个帖子)

    一.controller层 二.SERVICE层 @Overridepublic Result importJinjiangAssessResult(MultipartFile file) throw ...

  7. 触发器_实现ORACEL自动增长字段

    实现XX表的字段code,为自动增长字段? 1.创建一个sequence,如图: 输入如下数据: S_COUNTRY为sequence名称 2.创建一个触发器,目的是在插入数据之前插入自动增长的数字, ...

  8. (一)、Java内存模型

    简述 Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM),来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效 ...

  9. 第四模块 :微服务调用链监控CAT架构和实践

    采样率:每一个请求为都进行记录,或者100次请求为记录50次 各个开源框架都满足opentracing的标准,只要使用opentracing标准埋点的客户端,可以使用不同的客户端去展示,opentra ...

  10. java android 序列号serializable和parcelable

    why 为什么要了解序列化?—— 进行Android开发的时候,无法将对象的引用传给Activities或者Fragments,我们需要将这些对象放到一个Intent或者Bundle里面,然后再传递. ...