面向对象(OOP):基本单元:对象 封装数据与功能
具有良好复用性、灵活性、扩展性
两个基本概念:类、对象 基本要素:属性(信息)、方法 特性:继承(单,多)、多态、封装性
同一类人对同一个问题有不同的看法,这个就是多态
class ClassName: 构造函数:def __init__(self,...) #魔术方法格式def__方法名__(self) 析构函数:(销毁)def __del__(self,...) (python垃圾回收) 老式类,新式类:Class OldStyle 、 Class NewStyle(object)
内建函数:dir()返回对象的属性 、 type()获取对象的类型
常用属性定义:1.没有下划线--->公有成员变量 2.有一个下划线--->不严格的私有成员变量:实际还是可以访问 3.有两个下划线--->较严格的私有成员变量,实际需要变法访问 PS:python实际没有属性控制一说法。 记住方法:没有不严格,只有 1级严格 2级严格
a == public
_ a == protect
__a == private
@classmethod 可用类名直接调用,也可以用对象名调用 @property 只能用对象名调用,后不用跟()
带有@property装饰器的方法,在调用的时候,就像是调用属性一样,是对象.方法名(后面不跟括号);通常的方法的调用,需要是对象.方法名()
类的继承 1.定义类的继承 class DerivedClass(BaseClassName): pass 2.继承的子类 会继承父类的属性和方法 也可以自己定义,覆盖父类的属性和方法 3.用super()调用父类的方法
class A(object):
def method(self,arg):
pass
class B(A):
def method(self,arg):
super(B,self).method(arg)
super(子类名, self).父类方法名()
多态: 子类重写父类 A()方法,实例化父类对象调用 A()时调用的是父类的 A()方法,用子类的实例化对象调用 A()方法时调用的是子类的 A()方法
类和运算符
1.利用魔术方法可以使运算符被Python的标准语法支持
2.比较运算符
__cmp__(self,other) 比较
__eq__(self,other) 处理等于
__lt__(self,other) 小于
__gt__(self,other) 大于
3.数字运算符
__add__(self,other) 加
__sub__(self,other) 减
__mul__(self,other) 乘
__div__(self,other) 除
4.逻辑运算符
__or__(self,other) 或
__and__(self,other) 和
if __name__ == '__main__'是什么意思? 答:python中,当打开一个.py文件时,经常会在代码的最下面看到if __name__ == '__main__':,现在就来介绍一下它的作用,模块是对象,并且所有的模块都有一个内置属性 __name__。一个模块的 __name__ 的值取决于如何应用模块。如果 import 一个模块,那么模块__name__ 的值通常为模块文件名,不带路径或者文件扩展名。但是也可以像一个标准的程序那样直接运行模块,在这 种情况下, __name__ 的值将是一个特别缺省"__main__"。 一个.py文件,如果是自身在运行,那么他的__name__值就是"__main__"; 如果它是被别的程序导入的(作为一个模块),比如: import re 那么,他的__name__就不是"__main__"了。 所以,在.py文件中使用这个条件语句,可以使这个条件语句块中的命令只在它独立运行时才执行