python--------面向对象【基础、类和对象的定义】

三大编程范式

编程范式即编程的方法论,表示一种编程风格

python是一门面向对象编程语言,但在python中并没有人强制你使用哪一种固定的风格

三大编程范式:

  • 面向过程编程
  • 函数式编程
  • 面向对象编程

面向对象设计和面向对象编程

**面向对象设计:**将一类具体事物的数据和动作整合到一起,即面向对象设计

例如:

def school(name,addr,type):
    #初始化函数   定义学校的属性并且把方法整合在一起
    def init(name,addr,type):
        sch = {
            'name': name,
            'addr': addr,
            'type': type,
            'kao_shi': kao_shi,
            'zhao_sheng': zhao_sheng
        }
        return sch
    #定义学校的动作
    def kao_shi(school):
        print('%s 学校正在考试'%school['name'])
    def zhao_sheng(school):
        print('%s %s 正在招生'%(school['type'],school['name']))
    return init(name,addr,type)

s1=school('a','北京','私立学校')
s2=school('b','武汉','私立学校')
s3=school('c','南京','公立学校')

s1['kao_shi'](s1)   #a 学校正在考试
s2['zhao_sheng'](s2)    #私立学校 b 正在招生
s3['kao_shi'](s3)    #c 学校正在考试

面向对象编程:用定义类+实例/对象的方式去实现面向对象的设计

self:

  • 由哪一个对象调用的方法,方法内的 self 就是 哪一个对象的引用
  • 在类封装的方法内部,self 就表示 当前调用方法的对象自己
  • 调用方法时,程序员不需要传递 self 参数

在方法内部

  • 可以通过 self. 访问对象的属性
  • 也可以通过 self. 调用其他的对象方法

初始化方法

  • 当使用 类名() 创建对象时,会 自动 执行以下操作:
    1. 为对象在内存中 分配空间 —— 创建对象
    2. 为对象的属性 设置初始值 —— 初始化方法(init)
  • 这个 初始化方法 就是 __init__ 方法,__init__ 是对象的内置方法
  • __init__ 方法是 专门 用来定义一个类 具有哪些属性的方法!
class School:
    #初始化函数   定义学校的属性并且把学校的动作联系起来
    def __init__(self,name,addr,type):
            self.name=name
            self.addr=addr
            self.type=type
    #定义学校的动作
    def kao_shi(self):
        print('%s 学校正在考试'%(self.name))
    def zhao_sheng(self):
        print('%s %s 正在招生'%(self.type,self.name))


s1=School('a','北京','私立学校')
s2=School('b','武汉','私立学校')
s3=School('c','南京','公立学校')

s1.kao_shi()   #a 学校正在考试
s2.zhao_sheng()   #私立学校 b 正在招生
s3.kao_shi()   #c 学校正在考试
  • 类的外部,通过 变量名. 访问对象的 属性和方法
  • 类封装的方法中,通过 self. 访问对象的 属性和方法

__del__ 方法

Python

  • 当使用 类名() 创建对象时,为对象分配完空间后,自动 调用 __init__ 方法
  • 当一个对象被从内存中销毁 前,会 自动 调用 __del__ 方法

应用场景

  • __init__ 改造初始化方法,可以让创建对象更加灵活
  • __del__ 如果希望在对象被销毁前,再做一些事情,可以考虑一下 __del__ 方法

生命周期

  • 一个对象从调用 类名() 创建,生命周期开始
  • 一个对象的 __del__ 方法一旦被调用,生命周期结束
  • 在对象的生命周期内,可以访问对象属性,或者让对象调用方法
class Cat:

    def __init__(self, new_name):

        self.name = new_name

        print("%s 来了" % self.name)

    def __del__(self):

        print("%s 去了" % self.name)

# tom 是一个全局变量
tom = Cat("Tom")

# 删除对象
del tom

运行结果

Tom 来了
#自动调用__del__
Tom 去了

__str__ 方法

  • Python 中,使用 print 输出 对象变量,默认情况下,会输出这个变量 引用的对象 是 由哪一个类创建的对象,以及在内存中的地址(十六进制表示)
  • 如果在开发中,希望使用 print 输出对象变量时,能够打印 自定义的内容,就可以利用 __str__ 这个内置方法了

注意:str 方法必须返回一个字符串

   class Cat:

    def __init__(self, new_name):
        self.name = new_name
        print("%s 来了" % self.name)

    def __del__(self):
        print("%s 去了" % self.name)

tom = Cat("Tom")
print(tom)

运行结果

Tom 来了
<__main__.Cat object at 0x01C39970>
Tom 去了
class Cat:
    def __init__(self, new_name):
        self.name = new_name
        print("%s 来了" % self.name)

    def __del__(self):
        print("%s 去了" % self.name)

    def __str__(self):
        return "我是小猫:%s" % self.name

tom = Cat("Tom")
print(tom)

运行结果

Tom 来了
我是小猫:Tom
Tom 去了

类和对象

  • 类:把一类事物的相同特征和动作整合到一起就是类,类是一个抽象概念
  • 对象:就是基于类而创建的一个具体的事物(具体存在的) 也是特征和动作整合到一起

python中声明函数与声明类很相似

定义类名时第一个字母最好是大写的

经典类与新式类:

  • 只有在python2中才分经典类和新式类,python3中统一都是新式类
  • 新式类和经典类声明的最大不同在于,所有新式类必须继承至少一个父类
  • 所有类不管是否显示声明父类,都有一个默认继承object父类

在python2中的区别:

#经典类
class Chinese:
    pass

#新式类    
class Chinese(object):
    pass

为了保证编写的代码能够同时在 Python 2.xPython 3.x 运行!今后在定义类时,如果没有父类,建议统一继承自 object

在python3中,上述两种定义方式全都是新式类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值