面向对象知识

Python2中类分为:经典类 和 新式类
  • 创建类:
类名要满⾜标识符命名规则,同时遵循⼤驼峰命名习惯
class 类名():
    代码
    ......
  • 创建对象:对象名 = 类名()
self指的是调⽤该函数的对象相当于java中的this
  • 类外面添加对象属性的值:对象名.属性名 =
one.name='Tom'
  • 类外面获取属性的值:值=对象名.属性
print(haier1.width)
  • 类里面获取对象属性:self.属性名
class Washer():
    # 定义初始化功能的函数    # 添加实例属性
def __init__(self):
        self.width = 500
        self.height = 800
__init__():构造函数即初始化
Python中, __xx__() 的函数叫做魔法⽅法,指的是具有特殊功能的函数。
  • __init__() ⽅法的作⽤:初始化对象。
  • __init__() ⽅法,在创建⼀个对象时默认被调⽤,不需要⼿动调⽤
  • __init__(self) 中的self参数,不需要开发者传递,python解释器会⾃动把当前的对象引
  • ⽤传递过去。
class Washer():
    # 定义初始化功能的函数    # 添加实例属性
    def __init__(self):
        self.width = 500
        self.height = 800
    def print_info(self):
    # 类⾥⾯调⽤实例属性
    print(f'洗⾐机的宽度是{self.width}, ⾼度是{self.height}')
haier1 = Washer()
haier1.print_info()
  • 带参数的__init__():
class Washer():
    def __init__(self, width, height):
        self.width = width
        self.height = height
__str__():输出对象
  • 当使⽤print输出对象的时候,默认打印对象的内存地址。如果类定义了 __str__ ⽅法,那么就会打印从在这个⽅法中 return 的数据
class Washer():
    def __init__(self, width, height):
        self.width = width
        self.height = height
    def __str__(self):
        return '这是海尔洗⾐机的说明书'
haier1 = Washer(10, 20)
print(haier1)
__del__():删除
  • 当删除对象时,python解释器也会默认调⽤ __del__() ⽅法。
class Washer():
    def __init__(self, width, height):
        self.width = width
        self.height = height
    def __del__(self):
        print(f'{self}对象已经被删除')
haier1 = Washer(10, 20)
del haier1
# <__main__.Washer object at 0x0000026118223278>对象已经被删除
⾯向对象三⼤特性
  • 封装
        将属性和⽅法书写到类的⾥⾯的操作即为封装
        封装可以为属性和⽅法添加私有权限
  • 继承
        ⼦类默认继承⽗类的所有属性和⽅法
        ⼦类可以重写⽗类属性和⽅法
  • 多态
        传⼊不同的对象,产⽣不同的结果
多态多态指的是⼀类事物有多种形态,(⼀个抽象类有多个⼦类,因⽽多态的概念依赖于继承)。
  • 定义:多态是⼀种使⽤对象的⽅式,⼦类重写⽗类⽅法,调⽤不同⼦类对象的相同⽗类⽅法,可以产⽣不同的执⾏结果
class Dog(object):
    defwork(self): # ⽗类提供统⼀的⽅法,哪怕是空⽅法
        print('父类方法')
class ArmyDog(Dog): # 继承Dog类
    defwork(self): # ⼦类重写⽗类同名⽅法
        print('子类方法')
class Person(object):
    def work_with_dog(self, dog): # 传⼊不同的对象,执⾏不同的代码,即不同的work函数
        dog.work()
ad = ArmyDog()  #创建子类对象
daqiu = Person()
daqiu.work_with_dog(ad)
类属性:
  •     类属性就是 类对象 所拥有的属性,它被 该类的所有实例对象 所共有
    类属性可以使⽤ 类对象 实例对象 访问。
    类的实例 记录的某项数据 始终保持⼀致时,则定义类属性。
    实例属性 要求 每个对象 为其 单独开辟⼀份内存空间 来记录数据,⽽ 类属性 为全类所共有仅占⽤⼀份内存更加节省内存空间
  • 类属性只能通过类对象修改,不能通过实例对象修改,如果通过实例对象修改类属性,表示的是创建了⼀个实例属性。
class Dog(object):
    tooth = 10  #类属性
Dog.tooth = 12  #通过类对象修改
wangcai = Dog()   #报错,不能通过实例对象修改
wangcai.tooth = 20
实例属性:
  • 实例属性不能通过类对象修改,只能通过实例对象修改。
class Dog(object):
    def __init__(self):  #实例属性
        self.age = 5
    def info_print(self):
        print(self.age)
wangcai = Dog()
print(wangcai.age) # 5
# print(Dog.age) # 报错:实例属性不能通过类访问
类⽅法和静态⽅法
  • 类方法:@classmethod
  1.  第⼀个形参是类对象的⽅法
  2.  需要⽤装饰器 @classmethod 来标识其为类⽅法,对于类⽅法,第⼀个参数必须是类对象,⼀般以cls 作为第⼀个参数。
class Dog(object):
    __tooth = 10
    @classmethod
    def get_tooth(cls):
        return cls.__tooth
wangcai = Dog()
result = wangcai.get_tooth()
print(result) # 10
  • 静态方法  @staticmethod
  1. 需要通过装饰器 @staticmethod 来进⾏修饰,静态⽅法既不需要传递类对象也不需要传递实例对象
  2. (形参没有self/cls
  3. 静态⽅法 也能够通过 实例对象 类对象 去访问。
  4. 静态⽅法使⽤场景
            当⽅法中 既不需要使⽤实例对象(如实例对象,实例属性)也不需要使⽤类对象 (如类属性、类⽅法、创建实例等)时,定义静态⽅法
            取消不需要的参数传递,有利于 减少不必要的内存占⽤和性能消耗
class Dog(object):
    @staticmethod
    def info_print():
        print('这是⼀个狗类,⽤于创建狗实例....')
wangcai = Dog()
# 静态⽅法既可以使⽤对象访问⼜可以使⽤类访问
wangcai.info_print()
Dog.info_print()
继承:
pass 是一个空语句,它在Python中是一个占位符,不执行任何操作。它通常用于在语法上需要语句
#单继承
class Prentice(Master):
#多继承
class Prentice(School, Master):
    pass
  • super()调⽤⽗类⽅法
异常
try:
    可能发⽣错误的代码
except:
    如果出现异常执⾏的代码
1. 如果尝试执⾏的代码的异常类型和要捕获的异常类型不⼀致,则⽆法捕获异常。
2. ⼀般try下⽅只放⼀⾏尝试执⾏的代码。
try:
    print(1/0)
except (NameError, ZeroDivisionError):
    print('有错误')
  • NameError:当试图访问一个未定义的变量时,会引发 NameError。在这种情况下,except 语句将捕获该异常并执行相应的代码块。
  • ZeroDivisionError:当试图在除法运算中除以零时,会引发 ZeroDivisionError。同样地,except 语句将捕获该异常
捕获所有异常:Exception是所有程序异常类的⽗类
try:
    print(num)
except Exception as result:
    print(result)
异常的else:else表示的是如果没有异常要执⾏的代码。
try:
    print(1)
except Exception as result:
    print(result)
else:
    print('我是else,是没有异常的时候执⾏的代码')
异常的finally:finally表示的是⽆论是否异常都要执⾏的代码,例如关闭⽂件。
try:
   可能出现错误的代码
except Exception as result:
    出现错误后,执行的代码。
else:
    没有出现错误,执行的代码。
finally:
    ⽆论是否异常都要执⾏的代码。
异常的传递
Python中,抛出⾃定义异常的语法为 raise 异常类对象
# 1. ⾃定义异常类
class 异常类类名(Exception):
代码
# 设置抛出异常的描述信息
def __str__(self):
return ...
# 2. 抛出异常
raise 异常类名()
# 捕获异常
except Exception..
模块和包
模块制定:
Python中,每个Python⽂件都可以作为⼀个模块,模块的名字就是⽂件的名字。
也就是说⾃定义模块名必须要符合标识符命名规则。
import 模块名
from 模块名 import 功能名
from 模块名 import *
import 模块名 as 别名
from 模块名 import 功能名 as 别名
# 1. 导⼊模块
import 模块名
import 模块名1, 模块名2...
# 2. 调⽤功能
模块名.功能名()
import math
print(math.sqrt(9)) # 3.0
from 模块名 import 功能1, 功能2, 功能3...
from math import sqrt
print(sqrt(9))
from 模块名 import *
from math import *
print(sqrt(9))
# 模块定义别名
import 模块名 as 别名
# 功能定义别名
from 模块名 import 功能 as 别名
# 模块别名
import time as tt
tt.sleep(2)
print('hello')
# 功能别名
from time import sleep as sl
sl(2)
print('hello')
如果使⽤ from .. import .. from .. import * 导⼊多个模块的时候,且模块内有同名功能。当调
⽤这个同名功能的时候,调⽤到的是后⾯导⼊的模块的功能。
 模块定位顺序
当导⼊⼀个模块,Python解析器对模块位置的搜索顺序是:
1. 当前⽬录
2. 如果不在当前⽬录,Python则搜索在shell变量PYTHONPATH下的每个⽬录。
3. 如果都找不到,Python会察看默认路径。UNIX下,默认路径⼀般为/usr/local/lib/python/
模块搜索路径存储在system模块的sys.path变量中。变量⾥包含当前⽬录,PYTHONPATH和由安装过
程决定的默认⽬录。
注意
⾃⼰的⽂件名不要和已有模块名重复,否则导致模块功能⽆法使⽤
使⽤from 模块名 import 功能 的时候,如果功能名字重复,调⽤到的是最后定义或导⼊的功
能。
如果⼀个模块⽂件中有 __all__ 变量,当使⽤ from xxx import * 导⼊时,只能导⼊这个列表中的元素。
module1.py模块:
__all__ = ['testA','testB']
def testA():
    print('testA')
def testB():
    print('testB')
导⼊模块的⽂件代码
from module1 import *
testA()
testB()
包:
包将有联系的模块组织在⼀起,即放到同⼀个⽂件夹下,并且在这个⽂件夹创建⼀个名字 __init__.py ⽂件,那么这个⽂件夹就称之为包。
制作包:
[New] — [Python Package] — 输⼊包名 — [OK] — 新建功能模块(有联系的模块)
新建包后,包内部会⾃动创建 __init__.py ⽂件,这个⽂件控制着包的导⼊⾏为。

导包:包名.模块名.⽬标
import 包名.模块名
导包:必须在 __init__.py ⽂件中添加 __all__ = [] ,控制允许导⼊的模块列表。
from 包名 import *
模块名.⽬标
总结:
导⼊模块⽅法
import 模块名
from 模块名 import ⽬标
from 模块名 import *
导⼊包
import 包名.模块名
from 包名 import *
__all__ = [] :允许导⼊的模块或功能列表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值