Python的类
来源:互联网 发布:约爱是什么软件 编辑:程序博客网 时间:2024/05/29 02:20
像C++一样,class语句是Python的主要面向对象编程工具,与C++不同的是,Python的class不仅是一个说明,像def一样,class是一个对象建造者,是一个隐含的赋值(运行时它产生了一个类对象,并用列在首部的类名字来引用这个对象)。
- 类的定义
- 通过继承来定制类
- 类可以重载Python的操作符
类的定义:
class FirstClass(): def setdata(self, value): self.data = value def display(self): print(self.data)
类定义的格式如上所示,类中包含方法的定义。Python语言,一定要对齐,注意格式的规范。类的实例如下:
x = FirstClass()y = FirstClass()x.setdata("king")x.display();y.setdata(90);y.display();
king90
通过继承来定制类
类继承的思想是:
- 超类列在类首部的括号里;
被继承的类为超类(superclass)。
- 类从超类继承属性;
- 实例从所有相关类中继承;
当查找一个名字时,Python先在实例中找,然后是它的类,最后是超类。
- 通过子类改变逻辑,而不是直接改变超类;
通过在子类里覆盖超类里的名字,子类就覆盖了继承的行为。
class SecondClass(FirstClass): def display(self): print('current value = "%s"' %self.data)
z = SecondClass();z.setdata(43)z.display();
current value = "43"
类可以重载Python的操作符:
- _ _X_ _的名字的方法是特殊的挂钩(hook);
Python通过特殊命名的方法拦截操作符,以实现操作符重载。
- Python在计算操作符时会自动调用这样的方法;
- 类可以冲定义大多数内置的操作符;
- 操作符重载似的类与Python的对象模型紧密集成;
class ThirdClass(SecondClass): def __init__(self,value): self.data = value def __add__(self,other): return ThirdClass(self.data + other) def __mul__(self, other): self.data = self.data * othera = ThirdClass("abc")a.display()b = a + 'xyz'b.display()a*3a.display()
current value = "abc"current value = "abcxyz"current value = "abcabcabc"
Python和面向对象编程:
继承:在Python里是基于属性查找;
多态:对于X.method来说,method方法的含义依赖于X的类型;
封装:方法和操作符实现了行为,而数据隐藏是一种约定;
名字空间规则总结
限定型名字(object.x)和非限定型名字是不同的:
非限定型名字与作用域有关;
限定型名字使用对象object的名字空间;
(在模块与类的)作用域内初始化对象的名字空间;
名字空间字典:
面向对象编程和授权:
授权指的是内嵌有其他对象的控制对象,它们向内嵌对象传递响应操作请求,控制对象负责跟踪访问这样的事物。Python里授权经常是用 __gerattr__方法来实现,因为它拦截了对不存在属性的访问,一个包裹类可以用__gerattr__把请求转向被包裹的类。 0 0
- Python--day13 python的类
- 【Python】Python学习笔记(类的继承)
- 【Python】Python的类、对象、属性、方法
- Python--day14 python的类2
- [Python]类的基础知识
- Python的类
- Python类的继承
- python的类
- python类的语法
- Python的类
- Python的str类
- [Python]类的基础知识
- python 类的使用
- python 类的使用
- python类的学习
- Python的类
- [Python]类的基础知识
- python类的继承
- android:descendantFocusability用法简析
- Python读写文件
- VC调用动态链接库的错误
- Condition Variable Spurious Wakes
- checkbox的value值是干嘛用的?如何使用?
- Python的类
- 方法重写 override 和 new 的区别 [C#]_lucky dog_百度空间
- ok,PHP,开始吧
- pentest blog
- 使用Apache Archiva搭建Maven Repository Server
- Java—log4j与commons-logging,slf4j的关系
- liunx中exec函数组
- HLG1073之并查集
- CoreData我所理解