Python基础之day08-面向对象基础3

文章目录

  • Python基础之day08-面向对象基础3
  • 一、
  • 二、类方法
  • 三、静态方法
  • 四、总结实例、类、静态方法

代码仓库地址: https://gitee.com/andox_yj/python

一、

  1. 类属性与实例属性介绍:

    • 实例属性:

      • 用法:对象.属性名 = 属性值 或 self.属性名 = 属性值
      • 介绍:
        • 只能用实例对象调用,不可用类对象调用,
        • 只能用实例对象修改,不可用类对象修改。否则只是为类对象创建一个新属性。
    • 类属性:
      • 用法:定义到类里面 方法的外面
      • 介绍:
        • 可以用实例对象调用,可以用类对象调用,
        • 只能用类对象修改,不可用实例对象修改。否则只是为实例对象创建一个新属性。
        • 类属性会被所有该类的实例对象所用共有。类属性不能传参,只能是在类里面定义。
        • 可以通过类方法来修改类属性(类方法后面介绍)
  2. 代码示例

    class Animal:english_name = "animal"  # 类公有属性__china_name = "动物"  # 类私有属性def __init__(self, name, age):self.name = name  # 实例公有属性self.__age = age  # 实例私有属性cat = Animal("汤姆", 22)
    # ################# 1.通过实例对象访问属性 ####################
    print(cat.english_name)  # animal
    # print(cat.__china_name)  # 私有类属性访问不了
    # 强制访问私有类属性
    print(cat._Animal__china_name)  # 动物# 通过实例对象访问实例属性
    print(cat.name)  # 汤姆
    # print(cat.__age)  # 私有对象属性访问不了
    # 强制访问私有对象属性
    print(cat._Animal__age)  # 22# ################# 2.通过类访问属性 ####################
    print(Animal.english_name)  # animal
    # print(cat.__china_name)  # 私有类属性访问不了
    # 强制访问私有类属性
    print(Animal._Animal__china_name)  # 动物# 通过类访问实例属性,访问不了,报错
    # print(Animal.name)
    # print(cat.__age)
    # print(Animal._Animal__age)# ################# 3.通过实例对象修改属性 ####################
    cat.name = "黑猫"
    cat._Animal__age = 16
    print(cat.name)  # 黑猫
    print(cat._Animal__age)  # 16# 注意,此处不是修改类属性,而是给实例添加了两个属性,属性名分别为english_name和_Animal__china_name
    cat.english_name = "ANIMAL"
    cat._Animal__china_name = "DONGWU"
    # 给实例添加两个属性
    print(cat.english_name)  # ANIMAL
    print(cat._Animal__china_name)  # DONGWU
    # 类属性依然不变
    print(Animal.english_name)  # animal
    print(Animal._Animal__china_name)  # 动物# ################# 4.通过类对象修改属性 ####################
    Animal.english_name = "ANIMAL"
    print(Animal.english_name)  # ANIMAL
    print(cat.english_name)  # ANIMAL
    # 注意,此处不是修改实例属性,而是给类例添加了2个属性,属性名分别为name和_Animal__age
    Animal.name = "猫"
    Animal._Animal__age = 55
    # 给类添加两个属性
    print(Animal.name)  # 猫
    print(Animal._Animal__age)  # 55
    # 实例属性依然不变
    print(cat.name)  # 黑猫
    print(cat._Animal__age)  # 16
    

二、类方法

  1. 类方法介绍:使用装饰器@classmethod。第一个参数必须是当前类对象(类也是一个对象)该参数一般为"cls",通过它来传递类的属性和方法(不能传实例的属性和方法)
  2. 类方法定义:@classmethod用来装饰类方法,写到类里的方法上面。不需要self参数,但第一个参数需要是表示自身类的cls参数。
  3. 类方法调用:类名.属性名 或 对象.方法名。
  4. 注意:类方法可以访问与修改类属性。当类方法与实例方法重名时,不管通过类对象还是实例对象来调用,都是优先使用实例方法。
  5. 代码示例
 # ################# 1.类方法的定义与调用 ####################class Person():country = 'China'# 类方法,用classmethod来进行装饰@classmethoddef get_country(cls):# 第一个参数就是代表这个类对象,所以cls.country 等于 Person.countryprint(cls.country)p = Person()# 通过实例对象调用类方法p.get_country()  # China# 通过类对象调用类方法Person.get_country()  # China# ################# 2.类方法修改类属性 ####################class Person:country = 'China'# 类方法,用classmethod来进行装饰@classmethoddef set_country(cls, country):cls.country = countryp = Person()# 通过实例对象调用类方法p.set_country("South Korea")print(p.country)  # South Koreaprint(Person.country)  # South Korea# 通过类对象调用类方法Person.set_country("North Korea")print(p.country)  # North Koreaprint(Person.country)  # North Korea# ################# 3.类方法与实例方法重名 ####################class Person:country = 'China'# 类方法,用classmethod来进行装饰@classmethoddef get_country(cls):print(cls.country)def get_country(self):print("这是实例方法")p = Person()# 当类方法与实例方法重名时,不管通过类对象还是实例对象来调用,都是优先使用实例方法p.get_country()  # 这是实例方法Person.get_country(p)  # 这是实例方法

三、静态方法

  1. 静态方法介绍:使用装饰器@staticmethod。参数随意,没有’self’或’cls’参数,就跟使用普通函数一样。
  2. 类方法定义:@staticmethod用来装饰静态方法,写到类里的方法上面,
  3. 类方法调用:类名.方法名 或 对象.方法名
  4. 注意:当静态方法与实例方法重名时,不管通过类对象还是实例对象来调用,都是优先使用实例方法。
  5. 代码示例:
    # ################# 1.静态方法的定义与调用 ####################
    class People(object):country = 'china'# 静态方法@staticmethoddef get_country():print(People.country)p = People()
    # 通过对象访问静态方法
    p.get_country()  # china
    # 通过类访问静态方法
    People.get_country()  # china# ################# 2.静态方法与实例方法重名 ####################
    class People(object):country = 'china'# 静态方法@staticmethoddef get_country():print(People.country)def get_country(self):print("这是实例方法")p = People()
    # 当静态方法与实例方法重名时,不管通过类对象还是实例对象来调用,都是优先使用实例方法
    p.get_country()  # 这是实例方法
    People.get_country(p)  # 这是实例方法
    

四、总结实例、类、静态方法

  • 实例方法:

    • 只能被对象调用。
    • 默认有个self参数。
  • 类方法:
    • 可以被类和对象调用。
    • 默认有个 cls 参数,需要加上 @classmethod 装饰器。
  • 静态方法:
    • 可以直接使用类名调用。
    • 用 @staticmethod 装饰的不带 self 参数 和cls 参数 的方法叫做静态方法,类的静态方法可以没有参数。
  • 注意:
    • 静态方法与类方法同名时,使用后面定义的方法,既会覆盖前面的。
    • 实例对象调用静态方法或类方法时,需要传入实例对象作为参数。
    • 不管是实例对象调用还是类调用,都会优先调用实例方法。
  1. 代码示例

    # ################# 静态方法与类方法同名时,使用后面定义的方法,既会覆盖前面的。 ####################
    class Person:@staticmethoddef printout():print("静态方法")@classmethoddef printout(cls):print("类方法")p = Person()
    p.printout()
    Person.printout()
    

Python基础之day08-面向对象基础3相关推荐

  1. Python基础入门_5面向对象基础

    Python 基础入门前四篇: Python 基础入门–简介和环境配置 Python基础入门_2基础语法和变量类型 Python基础入门_3条件语句和迭代循环 Python基础入门_4函数 第五篇主要 ...

  2. Python第十七课(面向对象基础)

    Python第17课(面向对象基础)    >>>思维导图>>>中二青年 面向对象编程思想OOP 什么是面向对象 面向对象是一种编程思想,是前辈们总结出的经验,指导 ...

  3. 跟着王进老师学开发Python篇第四季:面向对象基础篇-王进-专题视频课程

    跟着王进老师学开发Python篇第四季:面向对象基础篇-772人已学习 课程介绍         本季课程为Python面向对象基础篇,内容包含:面向对象的介绍.创建类和实例化.实例变量和实例方法.类 ...

  4. python面向对象基础知识_Python基础知识day08面向对象(上)

    本帖最后由 小江哥 于 2018-9-14 11:45 编辑 面向对象编程介绍 想一想 请用程序描述如下事情: · A同学报道登记信息 · B同学报道登记信息 · C同学报道登记信息 · A同学做自我 ...

  5. 2021小白Python学习记录Day7 面向对象基础(上) (定义类和对象、__init__传参、self、魔术方法)

    目录 一.定义类和对象 1.定义类 2.创建一个对象 2.1 创建一个实例对象并调用实例方法 2.2 创建另一个实例对象: 2.3 添加实例属性 二.__init__(self) 1. __init_ ...

  6. 01 PHP面向对象基础

    转载于:黑马程序员武汉中心 面向对象基础 文章目录 面向对象基础 一.面向对象编程思想 **二.面向对象基础** **1.面向对象关键字说明** **2.面向对象简单技术实现** **3.类成员** ...

  7. 【Java练习题汇总】《第一行代码JAVA》面向对象基础篇,汇总Java练习题——面向对象:特性、类与对象、数组、String、内部类... ~

    Java练习题 · 面向对象基础篇 1️⃣ 面向对象基础篇 1️⃣ 面向对象基础篇 一.填空题 面向对象的三大特征:_______ ._______ ._______. 类由_______和_____ ...

  8. Python基础day09【面向对象(封装、继承、多态)、重写、私有权限】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day09[面向对象(封装.继承.多态).重写.私有权限] Python基础day ...

  9. Python面向对象基础示例_创建对象

    Python面向对象基础示例_创建对象 python是面向对象的语言,你可以很轻松的创建一个类和对象.本书代码源自<<Python 3 Object-Oriented Programmin ...

  10. python和对象复习_python 面向对象基础和高级复习

    面向对象基础 面向对象编程 面向过程编程:类似于工厂的流水线 优点:逻辑清晰 缺点:扩展性差 面向对象编程:核心是对象二字,对象属性和方法的集合体,面向对象编程就是一堆对象交互 优点:扩展性强 缺点: ...

最新文章

  1. 异步编程Promise、Generator和Async
  2. 单目视觉标定:世界坐标系、相机坐标系、图像坐标系、像素坐标系——简单粗暴,粗暴
  3. 作者:胡晓彦(1987-),女,中国科学院国家空间科学中心助理研究员
  4. 『震惊』秘密报告披露转基因食品危害
  5. muduo网络图书馆评测
  6. 蓝牙 sig base uuid_西圣XISEM真无线蓝牙耳机ASN体验:轻盈舒适,声音悦耳_
  7. php显示几个字符串,比较php中的两个字符串并显示字符差异
  8. r.java自动删除变量_比较变量并删除一个最低值R [关闭]
  9. 服务器中C盘的虚拟大文件,查看虚拟机的大文件系统
  10. BZOJ4602: [Sdoi2016]齿轮(并查集 启发式合并)
  11. OpenGL超级宝典(第7版)环境配置和相关问题
  12. 反复横跳的瞄准线!从向量计算说起!基于射线检测的实现!Cocos Creator!
  13. 第三届算法设计与编程挑战赛(冬季赛)G题
  14. ORACLE 10g命令大全
  15. 复兴号为什么不能超载?_接下来:什么都没有? 信息超载如何影响我们的大脑。...
  16. mysql常考50_要想学好SQL语句必会的50题,也是考试常考的点
  17. 【国服封测体验】18日国服压轴大戏“天魔大战”全记录
  18. 深度学习——激励函数
  19. jquery京东新版左侧下拉分类导航菜单代码
  20. 解决Dev-C++ 中to_string()报错问题

热门文章

  1. 蓝桥杯第十三届决赛真题-左移右移
  2. Android弹幕实现:基于B站弹幕开源系统(3)-文本弹幕的完善和细节调整
  3. 微信公众号生成带参数的二维码
  4. 【OpenCV入门】读取图片/视频/调用摄像头
  5. Web h5开发 初学总结
  6. 医学网android课程,医学云课堂
  7. java遍历jsonobject_Java遍历JsonObject对象代码示例
  8. expect离线安装
  9. 【自动化测试经验谈】字节8年自动化测试工程师成长之路
  10. java枚举类及面试题为什么枚举实现单例模式是安全的?