文章目录
面向对象
害,说得像是我有对象一样。
此对象非彼对象,面向对象(Object Oriented)是一种编程的思想,而不是一种编程语言,而Python也是支持面向对象的语言。
面向对象的核心是抽象、继承、多态。 在面向对象思想中,一切皆是对象,每个对象都有它的属性个方法,每个对象都可以通过消息互相交互。
本文将侧重Python中类和对象的使用,更多面向对象思想可参考设计模式系列博客。
类的定义
语法:
class ClassName(father class name):
<statement-1>
...
<statement-N>
- ClassName表示自定义类的名字
- father class name 是继承父类的名字
- statement是类成员表达式,可以是属性或方法
举例:
class TeatA(object): # 类名TestA
value = 0 # 属性
def printvalue(self): # 方法
print(self.value)
特别注意的是,类属性除了在class下显示的定义外,也能在方法中隐形的定义:
class TestB(object):
def printvalue(self):
self.value=0 # 隐形定义类属性value
print(self.value)
类的实例化
实例化就是创建一个类的对象。定义一个类知识造出一个类型,这个类型只有实例化成对象才有真正的实用意义。
语法:直接调用类名。
a = TeatA() # 使用类TestA实例化一个对象a
a.printvalue() # a拥有TestA定义好的属性和方法
b = TestB()
b.printvalue()
运行结果:
内置类型的实例化:
实际上Python任何类型都是面向对象意义上的类,所以都可以使用通用的实例化方法。
类的方法
类的方法其实就是定义在类内部的函数,只不过函数的首个参数必须是self(代表自身)。类方法里面调用类本身的属性和方法都必须加上self。
私有方法:私有方法(同private)就是只能被类中的其他方法调用,不能被类外面调用,通过两个下划线开头来定义,私有属性同理。
类的特殊方法
初始化函数:__init__
初始化函数是在类被实例化为对象时调用的函数
析构函数:__del__
析构函数是在对象被del操作从内存中卸载时所调用的函数
(
插播反爬信息)博主CSDN地址:wzlodq.blog.csdn.net/
操作符方法:
操作符方法让类支持加减乘除等各种运算的方法。
| 名称 | 运算符 | 运算符方法 | 说明 |
|---|---|---|---|
| 加 | + | __add__ | 两个对象相加 |
| 减 | - | __sub__ | 两个对象相减 |
| 乘 | * | __mul__ | 两个对象相乘 |
| 除 | / | __div__ | 两个对象相除 |
| 取模 | % | __mod__ | 返回除法的余数 |
| 左移 | << | __lshift__ | 把一个数的比特向左移一定数目 |
| 右移 | >> | __rshift__ | 把一个数的比特向右移一定数目 |
| 按位与 | & | __rand__ | 数的按位与 |
| 按位或 | | | __ror__ | 数的按位或 |
| 按位异或 | __xor__ | 数的按位异或 | |
| 按位翻转 | ~ | __invert__ | x的按位翻转 |
| 小于 | < | __lt__ | x<y返回x是否小于y |
| 大于 | __gt__ | x>y返回x是否大于y | |
| 小于等于 | <= | __le__ | x<=y返回x是否小于等于y |
| 大于等于 | >= | __ge__ | x>=y返回x是否大于等于y |
| 等于 | == | __eq__ | x==y比较对象是否相等 |
| 不等于 | != | __ne__ | x!=y比较两个对象是否不想等 |
| 自身加 | += | __iadd__ | x+=y将y加到x中去 |
| 自身减 | -= | __isub__ | x-=y将y从x中减去 |
| 切片 | x[i:j] | __getlice__ | 访问x的i到j部分z |
| 下标访问 | x[i] | __getitem__ | 通过i下标访问x |
只要重载了对应运算符方法,那么类就能使用对应运算符了。
类的继承
继承(泛化)是使一个类获得另一个类的所有属性和方法的能力,被继承的类称为父类或基类,继承的类称为子类或派生类。
语法:
class <name>(superclass1,superclass2,...)
多重继承:
指一个子类继承了好几个父类,多重继承颇有争议,在C++中受人诟病,Java中用接口取代了,不过Python仍支持多重继承。
重载:
指子类的属性名或方法名与父类相同时,子类的会覆盖掉父类的。
多重继承的重载:
重载不只存在于子类重载父类,害存在于多重继承时父类间的重载。
当父类们的属性和方法相同时,重载规则是从右向左重载。
类的关系
Python中类的关系除了上面讲的继承(泛化)外,还有依赖、关联、聚合、组合。java有接口的话还有实现关系。
关于uml的知识,可参考一文掌握UML类图:PlantUML实操分享
依赖:类的某个方法以被依赖的类作为其参数。
关联:类作为另一个类的成员属性
聚合和组合:类的实例作为另一个类的属性,特殊的关联。
Python系列博客持续更新中
原创不易,请勿转载(
本不富裕的访问量雪上加霜)
博主首页:wzlodq.blog.csdn.net/
微信公众号:唔仄lo咚锵
如果文章对你有帮助,记得一键三连❤