Python-面向对象(其他)

一、面向对象的三大特性


  1. 封装
    • 将属性和方法书写到类的里面的操作即为封装
    • 封装可以为属性和方法添加私有权限
  2. 继承
    • 子类默认继承父类的所有属性和方法
    • 子类可以重写父类属性和方法
  3. 多态
    • 传入不同的对象,产生不同的结果

二、多态


2.1 了解多态

多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承)

  • 定义:多态是一种使用对象的方式,子类重写父类方法调用不同子类对象的相同父类方法,可以产生不同的执行结果
  • 好处:调用灵活,有了多态,更容易编写出通用的代码,做出通用的编程以适应需求的不断变化
  • 实现步骤:
    • 定义父类,并提供公共方法
    • 定义子类,并重写父类方法
    • 传递子类对象给调用者,可以看到不同子类执行效果不同
2.2 体验多态
class Dog(object): 
      def work(self): # 父类提供统一的方法,哪怕是空方法 
            print('指哪打哪...') 

# 追敌犬 
class ArmyDog(Dog): # 继承Dog类 
      def work(self): # 子类重写父类同名方法 
            print('追击敌人...')
# 缉毒犬 
class DrugDog(Dog): 
      def work(self): 
            print('追查毒品...')
# 定义人类 
class Person(object): 
      def work_with_dog(self, dog): 
      # 传入不同的对象,执行不同的代码,即不同的work函数 
            dog.work() 
# 创建对象,调用不同的功能,传入不同对象,观察执行结果 
ad = ArmyDog() 
dd = DrugDog() 

daqiu = Person() 
daqiu.work_with_dog(ad) 
daqiu.work_with_dog(dd)

三、类属性和实例属性


3.1 类属性
3.1.1 设置和访问类属性
  • 类属性就是类对象所拥有的属性,它被该类的所有实例对象所有共有
  • 类属性可以使用类对象实例对象访问
    # 1.定义类,定义类属性 
    class Dog(object): 
          tooth = 10 
    
    # 2.创建对象 
    wangcai = Dog() 
    xiaohei = Dog() 
    
    # 3.访问类属性:类和对象 
    print(Dog.tooth) # 10 
    print(wangcai.tooth) # 10 
    print(xiaohei.tooth) # 10
    

    优点:

    1. 记录的某项数据 始终保持一致时,则定义类属性。
    2. 实例属性 要求 每个对象 为其 单独开辟一份内存空间 来记录数据,而 类属性 为全类所共有,仅占用一份内存,更加节省内存空间。
3.1.2 修改类属性

类属性只能通过类对象修改,不能通过实例对象修改,如果通过实例对象修改类属性,表示的是创建了
一个实例属性。

# 1. 
class Dog(object): 
        tooth = 10 

wangcai = Dog() 
xiaohei = Dog() 

# 修改类属性 
Dog.tooth = 12 
print(Dog.tooth) # 12 
print(wangcai.tooth) # 12 
print(xiaohei.tooth) # 12 

# 不能通过对象修改属性,如果这样操作,实则是创建了一个实例属性 
wangcai.tooth = 20 
print(Dog.tooth) # 12 
print(wangcai.tooth) # 20 
print(xiaohei.tooth) # 12

四、类方法和静态方法


4.1 类方法
4.1.1 类方法特点

需要用装饰器 @classmethod 来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以 cls
作为第一个参数。

4.1.2 类方法使用场景
  • 当方法中需要使用类对象(如何访问私有类属性等)时,定义类方法
  • 类方法一般和类属性配合使用
class Dog(object): 
      __tooth = 10 
      @classmethod 
      def get_tooth(cls): 
              return cls.__tooth 

wangcai = Dog() 
result = wangcai.get_tooth() 
print(result) # 10
4.2 静态方法
4.2.1 静态方法特点
  • 需要通过装饰器@staticmethod来进行修饰,静态方法既不需要传递也不需要传递示例对象(形参没有self/cls)
  • 静态方法 也能够通过示例对象类对象去访问
4.2.2 静态方法使用场景
  • 当方法中既不需要使用使用实例对象(如实例对象,实例属性),也不需要使用类对象(如类属性、类方法、创建实例等)时,定义静态方法
  • 取消不需要的参数传递,有利于减少不必要的内存占用和性能消耗
    class Dog(object): 
          @staticmethod 
          def info_print(): 
                print('这是一个狗类,用于创建狗实例....') 
    
    wangcai = Dog() 
    # 静态方法既可以使用对象访问又可以使用类访问 
    wangcai.info_print() 
    Dog.info_print()
    
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352