Python基础之day08-面向对象基础3
Python基础之day08-面向对象基础3
文章目录
- Python基础之day08-面向对象基础3
- 一、
- 二、类方法
- 三、静态方法
- 四、总结实例、类、静态方法
代码仓库地址: https://gitee.com/andox_yj/python
一、
类属性与实例属性介绍:
- 实例属性:
- 用法:对象.属性名 = 属性值 或 self.属性名 = 属性值
- 介绍:
- 只能用实例对象调用,不可用类对象调用,
- 只能用实例对象修改,不可用类对象修改。否则只是为类对象创建一个新属性。
- 类属性:
- 用法:定义到类里面 方法的外面
- 介绍:
- 可以用实例对象调用,可以用类对象调用,
- 只能用类对象修改,不可用实例对象修改。否则只是为实例对象创建一个新属性。
- 类属性会被所有该类的实例对象所用共有。类属性不能传参,只能是在类里面定义。
- 可以通过类方法来修改类属性(类方法后面介绍)
- 实例属性:
代码示例
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
二、类方法
- 类方法介绍:使用装饰器@classmethod。第一个参数必须是当前类对象(类也是一个对象)该参数一般为"cls",通过它来传递类的属性和方法(不能传实例的属性和方法)
- 类方法定义:@classmethod用来装饰类方法,写到类里的方法上面。不需要self参数,但第一个参数需要是表示自身类的cls参数。
- 类方法调用:类名.属性名 或 对象.方法名。
- 注意:类方法可以访问与修改类属性。当类方法与实例方法重名时,不管通过类对象还是实例对象来调用,都是优先使用实例方法。
- 代码示例
# ################# 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) # 这是实例方法
三、静态方法
- 静态方法介绍:使用装饰器@staticmethod。参数随意,没有’self’或’cls’参数,就跟使用普通函数一样。
- 类方法定义:@staticmethod用来装饰静态方法,写到类里的方法上面,
- 类方法调用:类名.方法名 或 对象.方法名
- 注意:当静态方法与实例方法重名时,不管通过类对象还是实例对象来调用,都是优先使用实例方法。
- 代码示例:
# ################# 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 参数 的方法叫做静态方法,类的静态方法可以没有参数。
注意:
- 静态方法与类方法同名时,使用后面定义的方法,既会覆盖前面的。
- 实例对象调用静态方法或类方法时,需要传入实例对象作为参数。
- 不管是实例对象调用还是类调用,都会优先调用实例方法。
- 代码示例
# ################# 静态方法与类方法同名时,使用后面定义的方法,既会覆盖前面的。 #################### class Person:@staticmethoddef printout():print("静态方法")@classmethoddef printout(cls):print("类方法")p = Person() p.printout() Person.printout()
Python基础之day08-面向对象基础3相关推荐
- Python基础入门_5面向对象基础
Python 基础入门前四篇: Python 基础入门–简介和环境配置 Python基础入门_2基础语法和变量类型 Python基础入门_3条件语句和迭代循环 Python基础入门_4函数 第五篇主要 ...
- Python第十七课(面向对象基础)
Python第17课(面向对象基础) >>>思维导图>>>中二青年 面向对象编程思想OOP 什么是面向对象 面向对象是一种编程思想,是前辈们总结出的经验,指导 ...
- 跟着王进老师学开发Python篇第四季:面向对象基础篇-王进-专题视频课程
跟着王进老师学开发Python篇第四季:面向对象基础篇-772人已学习 课程介绍 本季课程为Python面向对象基础篇,内容包含:面向对象的介绍.创建类和实例化.实例变量和实例方法.类 ...
- python面向对象基础知识_Python基础知识day08面向对象(上)
本帖最后由 小江哥 于 2018-9-14 11:45 编辑 面向对象编程介绍 想一想 请用程序描述如下事情: · A同学报道登记信息 · B同学报道登记信息 · C同学报道登记信息 · A同学做自我 ...
- 2021小白Python学习记录Day7 面向对象基础(上) (定义类和对象、__init__传参、self、魔术方法)
目录 一.定义类和对象 1.定义类 2.创建一个对象 2.1 创建一个实例对象并调用实例方法 2.2 创建另一个实例对象: 2.3 添加实例属性 二.__init__(self) 1. __init_ ...
- 01 PHP面向对象基础
转载于:黑马程序员武汉中心 面向对象基础 文章目录 面向对象基础 一.面向对象编程思想 **二.面向对象基础** **1.面向对象关键字说明** **2.面向对象简单技术实现** **3.类成员** ...
- 【Java练习题汇总】《第一行代码JAVA》面向对象基础篇,汇总Java练习题——面向对象:特性、类与对象、数组、String、内部类... ~
Java练习题 · 面向对象基础篇 1️⃣ 面向对象基础篇 1️⃣ 面向对象基础篇 一.填空题 面向对象的三大特征:_______ ._______ ._______. 类由_______和_____ ...
- Python基础day09【面向对象(封装、继承、多态)、重写、私有权限】
视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day09[面向对象(封装.继承.多态).重写.私有权限] Python基础day ...
- Python面向对象基础示例_创建对象
Python面向对象基础示例_创建对象 python是面向对象的语言,你可以很轻松的创建一个类和对象.本书代码源自<<Python 3 Object-Oriented Programmin ...
- python和对象复习_python 面向对象基础和高级复习
面向对象基础 面向对象编程 面向过程编程:类似于工厂的流水线 优点:逻辑清晰 缺点:扩展性差 面向对象编程:核心是对象二字,对象属性和方法的集合体,面向对象编程就是一堆对象交互 优点:扩展性强 缺点: ...
最新文章
- 异步编程Promise、Generator和Async
- 单目视觉标定:世界坐标系、相机坐标系、图像坐标系、像素坐标系——简单粗暴,粗暴
- 作者:胡晓彦(1987-),女,中国科学院国家空间科学中心助理研究员
- 『震惊』秘密报告披露转基因食品危害
- muduo网络图书馆评测
- 蓝牙 sig base uuid_西圣XISEM真无线蓝牙耳机ASN体验:轻盈舒适,声音悦耳_
- php显示几个字符串,比较php中的两个字符串并显示字符差异
- r.java自动删除变量_比较变量并删除一个最低值R [关闭]
- 服务器中C盘的虚拟大文件,查看虚拟机的大文件系统
- BZOJ4602: [Sdoi2016]齿轮(并查集 启发式合并)
- OpenGL超级宝典(第7版)环境配置和相关问题
- 反复横跳的瞄准线!从向量计算说起!基于射线检测的实现!Cocos Creator!
- 第三届算法设计与编程挑战赛(冬季赛)G题
- ORACLE 10g命令大全
- 复兴号为什么不能超载?_接下来:什么都没有? 信息超载如何影响我们的大脑。...
- mysql常考50_要想学好SQL语句必会的50题,也是考试常考的点
- 【国服封测体验】18日国服压轴大戏“天魔大战”全记录
- 深度学习——激励函数
- jquery京东新版左侧下拉分类导航菜单代码
- 解决Dev-C++ 中to_string()报错问题