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

a = A()
a.name = 'a'
a.age = 12
Traceback (most recent call last):
File "", line 1, in
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

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


>>> a = A()
>>> a.name = 'a'
>>> a.age = 12
Traceback (most recent call last):
File "", line 1, in
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 '小于运算'

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)时的行为

你可能感兴趣的:(python-面向对象)