python-面向对象

Python是一门面向对象语言,所以你可以很轻松的定义一个类并且创建出这个类的实例化对象。
面向对象是一种编程的思想,具有封装、继承、多态等特性,使得代码更容易维护、扩展,复用性强,降低了系统的耦合度,更加灵活便于维护,百度百科的解释为:面向对象(Object Oriented)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。
相对于面向对象的是面向过程,性能优于面向对象,但是在这同时资源开销也比较大,多用于嵌入式、单片机等性能优先的情况中。
面向对象的常用术语介绍:
类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
方法:类中定义的函数。
类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
局部变量:定义在方法中的变量,只作用于当前实例的类。
实例变量:在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。
继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待,意思就是学生类继承了人类的特征同时又有一些学生特有的特征(比如读书,写字)。
实例化:创建一个类的实例,类的具体对象。
对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
和其它编程语言相比,Python 在尽可能不增加新的语法和语义的情况下加入了类机制。

Python中的类提供了面向对象编程的所有基本功能:类的继承机制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可以调用基类中的同名方法。

对象可以包含任意数量和类型的数据。
Python中定义一个类的语法为:
class 类名(object):
类属性
类方法
object为python中所有类的父类(基类),在定义类的时候默认继承于object,这个参数可不写,但是还是会继承。
定义好了类之后可以用一个变量来接受这个类的实例对象,语法如下:
变量名 = 类名()
在类的内部可以定义类的属性,并且通过实例对象.属性名的方式来调用,后面还会介绍更多的高级使用方法

class a(object):
name = 'a'

A = a()
print(A.name)
a
下面开始介绍类的各种方法:
1、最普通的类方法:在类的内部定义一个方法,接收一个self参数,实例化后通过实例对象名.方法名()的方式来调用,这个方法也可以接收其他参数,这个参数要在实例化的时候传递给这个类
class people():
def speak(self):
print('hello')
xiaoming.speak()
hello
2、初始化方法(init):这个方法在类被实例化之后立即执行(其实他并不是第一个执行的方法,后面会讲到),不需要调用,创建类的时候可以不定义这个方法,但是如果要定义必须放在第一个
class people():
def init(self,name):
print('我叫%s' %name)

xiaoming = people('小明')
我叫小明
3、str,当类的实例对象在被print的时候会调用此方法,打印出的是此方法的返回值,默认返回这个类在内存中的地址

class A():
def str(self):
return '我是A类'
class B():
pass
a = A()
b = B()
print(a)
我是A类
print(b)
<main.B object at 0x000001B85C459AC8>
4、mro:显示指定类的所有继承脉络和继承顺序,特别注意的一点是所有类的父类都是object,所有不管前面是多少最后一个总会是object
class A():
pass

class B(A):
pass

class C(B):
pass
print (C.mro)
(<class 'main.C'>, <class 'main.B'>, <class 'main.A'>, <class 'object'>)
5、slots关闭类的动态属性,这是一个魔法属性而不是方法,用来限制已经实例化的对象不允许再动态的增加其他属性,或者只允许增加某几个属性,这几个属性通过元组的形式赋值给slots,如果不允许增加任何属性就给slots赋值一个空的元组,如果强行添加会导致代码报错
class A():
slots = ('name')

a = A()
a.name = 'a'
a.age = 12
Traceback (most recent call last):
File "<pyshell#78>", line 1, in <module>
a.age = 12
AttributeError: 'A' object has no attribute 'age'
6、类型转换,当实例化对象在被类型转换的时候调用此方法,以int转换为例,其他同理
class A():
def int(self):
return 10

a = A()
s = int(a)
print(s)
10

7、比较运算符,当实例化对象在做比较的时候会调用此方法,方法和运算符对应如下:
lt(self, other) 小于号的行为:x < y 调用 x.lt(y)

le(self, other) 定义小于等于号的行为:x <= y 调用 x.le(y)

eq(self, other) 定义等于号的行为:x == y 调用 x.eq(y)

ne(self, other) 定义不等号的行为:x != y 调用 x.ne(y)

gt(self, other) 定义大于号的行为:x > y 调用 x.gt(y)

ge(self, other) 定义大于等于号的行为:x >= y 调用 x.ge(y)

只是为了演示功能才返回了一句话,大家在实际开发中不要这么做

class A():
def lt(self,other):
return '小于运算'

a = A()
a<a

b = B()
>>> print(a)
我是A类
>>> print(b)
<main.B object at 0x000001B85C459AC8>
4、mro:显示指定类的所有继承脉络和继承顺序,特别注意的一点是所有类的父类都是object,所有不管前面是多少最后一个总会是object
>>> class A():
pass

>>> class B(A):
pass

>>> class C(B):
pass
>>> print (C.mro)
(<class 'main.C'>, <class 'main.B'>, <class 'main.A'>, <class 'object'>)
5、slots关闭类的动态属性,这是一个魔法属性而不是方法,用来限制已经实例化的对象不允许再动态的增加其他属性,或者只允许增加某几个属性,这几个属性通过元组的形式赋值给slots,如果不允许增加任何属性就给slots赋值一个空的元组,如果强行添加会导致代码报错
>>> class A():
slots = ('name')


>>> a = A()
>>> a.name = 'a'
>>> a.age = 12
Traceback (most recent call last):
File "<pyshell#78>", line 1, in <module>
a.age = 12
AttributeError: 'A' object has no attribute 'age'
6、类型转换,当实例化对象在被类型转换的时候调用此方法,以int转换为例,其他同理
>>> class A():
def int(self):
return 10

>>> a = A()
>>> s = int(a)
>>> print(s)
10

7、比较运算符,当实例化对象在做比较的时候会调用此方法,方法和运算符对应如下:
lt(self, other) 小于号的行为:x < y 调用 x.lt(y)

le(self, other) 定义小于等于号的行为:x <= y 调用 x.le(y)

eq(self, other) 定义等于号的行为:x == y 调用 x.eq(y)

ne(self, other) 定义不等号的行为:x != y 调用 x.ne(y)

gt(self, other) 定义大于号的行为:x > y 调用 x.gt(y)

ge(self, other) 定义大于等于号的行为:x >= y 调用 x.ge(y)


# 只是为了演示功能才返回了一句话,大家在实际开发中不要这么做
>>> class A():
def lt(self,other):
return '小于运算'


>>> a = A()
>>> a<a
'小于运算'

8、算数运算符,当类的实例对象在进行加减乘除等运算的时候会调用对应方法:
add(self, other) 定义加法的行为:+

sub(self, other) 定义减法的行为:-

mul(self, other) 定义乘法的行为:*

truediv(self, other) 定义真除法的行为:/

floordiv(self, other) 定义整数除法的行为://

mod(self, other) 定义取模算法的行为:%

divmod(self, other) 定义当被 divmod() 调用时的行为

pow(self, other[, modulo]) 定义当被 power() 调用或 ** 运算时的行为

lshift(self, other) 定义按位左移位的行为:<<

rshift(self, other) 定义按位右移位的行为:>>

and(self, other) 定义按位与操作的行为:&

xor(self, other) 定义按位异或操作的行为:^

or(self, other) 定义按位或操作的行为:|

class A():
def add(self,other):
a = 1+other
return a

a = A()
a + 1
2

9、容器类型,用法与前面的方法基本相同

len(self) 定义当被 len() 调用时的行为(返回容器中元素的个数)

getitem(self, key) 定义获取容器中指定元素的行为,相当于 self[key]

setitem(self, key, value) 定义设置容器中指定元素的行为,相当于 self[key] = value

delitem(self, key) 定义删除容器中指定元素的行为,相当于 del self[key]

iter(self) 定义当迭代容器中的元素的行为

reversed(self) 定义当被 reversed() 调用时的行为

contains(self, item) 定义当使用成员测试运算符(in 或 not in)时的行为

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容

  • 一、面向对象,这个对象到底是什么? 这个对象不是python中的实例,python中我们把一个类的实例也叫做对象,...
    youngkun阅读 913评论 0 2
  • 自己以前整理的笔记,不太完整,后续会不断更新。。。。 [ ] __new__方法扩展 [ ] 魔法方法 [ ] 什...
    alan2yang阅读 1,701评论 0 1
  • Python 面向对象 作者:杨梦鸽 校对:翟舒青 Python从设计之初就已经是一门面向对象的语言,正因为如此,...
    木易林1阅读 145评论 0 1
  • 作者:伊一 写作马拉松码字时候的感受吗?是一个体验感受的过程,当写的内容不同的时候感受也不一样。 刚开始有很多困惑...
    剑飞在思考阅读 284评论 0 0
  • 早上洗漱的时候,我梳好头发还没扎,就问女儿“妈妈这个样子好看吗”?结果女儿回答“妈妈,我觉得你留什么发型都好看”。...
    落烟静静阅读 163评论 0 1