python入门超easy系列(七)——— python面向对象编程

做个好员工还是做个好领导???

众所周知,python是世界上入门最简单的语言!?——周某人


面向对象

  • 与面向过程相比

    • 面向过程:数学逻辑的映射,学会做个好员工
    • 面向对象:生活逻辑的映射,学会做个好领导
  • 类和对象在生活中的实例

    • 类: 用来描述具有相同的属性和方法的对象的集合
    • 对象:万物皆对象
    对象
    小明、老王
    手机你的手机、我的手机
    动物小狗、小喵
    • 官方定义:
      • 类:具有相同特征(属性和行为)事物的抽象
      • 对象:某个类的具象
    • 编程语言:
      • 类:是一种自定义的数据类型
      • 对象:某个类类型的变量

基础语法

  • 类的定义

    class 类名:
    	pass
    
  • 使用说明

    • 定义类的关键字是class
    • 类名:符合标识符命名规范即可,通常采用大驼峰命名风格UserName
    • 属性可以通过变量体现,行为通过函数体现
    • 成员访问:
      • 属性:对象.属性名
      • 方法:对象.方法名
    • 示例:
      # 定义类
      class Person:
          # 行为通过函数体现
      
          # 吃饭
          def eat(self):
              print('毛氏红烧肉,听说很好吃!')
      
          # 睡觉
          def sleep(self):
              print('喜欢睡觉也是生活态度!')
              
      # 创建对象  
      p = Person()
      # print(p)
      
      # 属性可以动态添加
      p.name = 'ergou'
      p.age = 22
      print(p.name, p.age)
      
      # 调用成员方法
      p.eat()
      p.sleep()
      
  • self使用
    self表示当前对象,也就是调用类方法的对象

    class Person:
        def run(self):
            # self表示当前对象,就是调用该方法的对象
            print('{}每天以2m/s的速度奔跑5km'.format(self.name))
    
    	def introduce(self):
            # 访问成员属性
            print('我叫{},今年18岁'.format(self.name))
            # 调用成员方法
            # self的名字可以修改,但是通常都不改,调用方法时该参数不传
            self.run()
                
    lulu = Person()
    lulu.name = '露露'
    # lulu.run()
    lulu.introduce()
    
    yanbo = Person()
    yanbo.name = '彦博'
    # yanbo.run()
    yanbo.introduce()
    

常用内置函数(方法)

  • 内置函数:在类中,特定的时刻会自动触发的函数

  • __str__函数:打印对象时默认打印:类名+地址。将该方法重写,打印对象时就会打印该方法的返回值,该方法返回一个字符串:

    class Person:
        # 使用str方法强制类型转换时也会调用该方法
        def __str__(self):
            return '我是{},今年{}岁'.format(self.name, self.age)
        
    p = Person()
    p.name = '勒布朗.詹姆斯'
    p.age = 34
    print(p)
    
    s = str(p)
    print(s)
    
  • __init__函数:该方法成为构造方法,创建对象之后自动调用,可以进行初始化设置:

    class Cat:
          def __str__(self):
              return 'name:{},age:{},color:{}'.format(self.name, self.age, self.color)
    
          def __init__(self, name, age, color):
              self.name = name
              self.age = age
              self.color = color
              
    jiafei = Cat('加菲', 2, '橘黄色')
    print(jiafei)
    
  • __del__函数:析构方法,当对象释放时,系统会自动调用,该方法一般做资源释放操作,如:断奶数据库链接、文件关闭

    class Pig:
        def __del__(self):
            print('大师兄,我不行了')
            
    bajie = Pig()
    del bajie
    print('八戒,一路走好!')       
    

常用属性操作函数

  • __setattr__:当设置属性时会自动触发

  • __getattr__:当获取不存在的属性时会自动触发

  • __delattr__:销毁对象的指定属性时会自动触发

  • 综合示例:

    class Person:
        def __init__(self, name):
            self.name = name
            # print('初始化对象')
    
        # 当设置属性时会自动调用
        def __setattr__(self, key, value):
            # print(key, value)
            self.__dict__[key] = value
    
        # 当获取不存在的属性时会自动触发
        def __getattr__(self, item):
            if item == 'age':
                return 18
            else:
                return '你猜'
    
        # 销毁对象的指定属性时会自动触发
        def __delattr__(self, item):
            print(item, '属性即将销毁')
            
            
    xiaoming = Person('小明')
    # xiaoming.name = '小明'
    
    print(xiaoming.age)
    print(xiaoming.height)
    
    print(xiaoming.__dict__)
    
    del xiaoming.name
    print('over')
    

将对象当作字典操作的内置函数

  • __setitem__:将对象当做字典操作,添加或设置属性时自动触发

  • __getitem__:将对象当做字典操作,根据键获取值时会自动触发

  • __delitem__:将对象当做字典操作,根据键销毁属性时会自动触发

  • 综合示例:

    class Person:
          # 将对象当做字典操作,添加或设置属性时自动触发
          def __setitem__(self, key, value):
              # print(key, value)
              self.__dict__[key] = value
    
          # 将对象当做字典操作,根据键获取值时会自动触发
          def __getitem__(self, item):
              # print(item)
              return self.__dict__.get(item)
    
          # 将对象当做字典操作,根据键销毁属性时会自动触发
          def __delitem__(self, key):
              print(key, '属性即将销毁')
              del self.__dict__[key]
                
    xiaoming = Person()
    
    xiaoming['name'] = '小明'
    print(xiaoming['name'])
    
    del xiaoming['name']
    print(xiaoming['name'])            
    

将对象当作函数调用的函数

  • __call__:将对象当做函数调用,该方法会自动触发,必须重写类的call方法

  • 具体示例:

    class Person:
          # 将对象当做函数调用,该方法会自动触发
          def __call__(self, *args, **kwargs):
              # print('__call__', args)
              return sum(args)
            
    p = Person()
    # 将对象当做函数调用,必须重写类的call方法
    ret = p(1, 2, 3)
    print(ret)
    
    def test():
    	pass
    
    # 判断一个对象是否可以调用
    print(callable(p))
    print(callable(test))
    
    # 判断一个对象是否是函数
    from inspect import isfunction
    print(isfunction(p))
    print(isfunction(test))
    
    # 判断对象是否拥有指定属性,若对象可以调用,那么一定拥有__call__属性
    print(hasattr(p, '__call__'))
    print(hasattr(test, '__call__'))
    

总结

这一部分的内容应该不算太难消化,大约用一个上午的时间就能完全消化,脑子里面多想几个生活中的实例,用面向对象思想的方法写下来,大约一天到两天就能完全掌握面向对象的基础了。


下期预告:下一期将讲解Python面向对象的三大特点:封装、继承和多态
Tips:如有疑问欢迎随时打扰 ???

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值