Python类的概念

类的技术名词解释

● 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
● 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
● 数据成员:类变量或者实例变量, 用于处理类及其实例对象的相关的数据。
● 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
● 局部变量:定义在方法中的变量,只作用于当前实例的类。
● 实例变量:在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。
● 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
● 实例化:创建一个类的实例,类的具体对象。
● 方法:类中定义的函数。
● 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

初识类

类有三大特性:继承、封装、多态
类是面向对象的编程思想,具体什么意思呢?举例来说,人有姓名、年龄、职业、工资等属性,以及人可以工作,健身,吃饭,睡觉等,我们可以把这些抽象出一个类,这个类下面有属性(姓名、年龄、职业、工资),有方法(工作,健身,吃饭,睡觉),我们所有人基本上都有这些属性,那么具体到某个人就是说是这个类的实例化对象。

创建一个类

class Person(object):# 类变量,类变量定义在类中且在函数体之外,可以直接用“类名.属性”调用sex = "男"def __init__(self, name, age):# _init__()方法称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法self.name = nameself.age = agedef work(self):print("人会工作")print(Person.sex)
p = Person("张三", 12)
p.work()
  1. init()方法称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法
  2. sex变量属于类方法,可以直接被类名调用
  3. p = Person(“张三”, 12),这句属于实例化对象

类的属性

类属性

class Animal():url = "www.baidu.com"  # 类属性

实例属性

class Animal():url = "www.baidu.com"  # 类属性def __init__(self,age,name):  # 实例属性self.age = ageself.name = name

私有属性

私有属性不能被子类调用,也不能被实例对象调用,两个下划线

__sex = "男"

类的方法

实例方法

不能用类名直接访问,可以被实例化对象访问

class Person(object):def __init__(self, name, age):self.name = nameself.age = agedef work(self):print("人会工作")print(Person.work())  #会报错,不能直接调用,需要先实例化对象,再调用

私有方法

不能用类名直接访问,也不能被类的实例化对象访问,只能在类里面可以访问

    def __eat(self):print("真会吃")

静态方法

用 @staticmethod 装饰的不带 self 参数的方法叫做静态方法,类的静态方法可以没有参数,方法后面的括号不需要加self,可以直接用类名访问,也可以被类的实例化对象访问。

class Person(object):def __init__(self, name, age):self.name = nameself.age = age@staticmethoddef staticFunction():print("静态方法")print(Person.staticFunction())

类方法

默认有个 cls 参数,需要加上 @classmethod 装饰器。
可以用类名直接访问,也可以被实例化对象访问,类方法可以访问静态方法,类方法可以访问类属性,类方法不能调用调用其它类方法的实例方法

class Animal():sex = "男"@classmethoddef eat(cls):print("这是一个类方法")cls.run()  # 类方法可以访问静态方法print(cls.sex)  # 类方法可以访问类属性cls.speak(cls)  #类方法不能调用调用其它类方法的实例方法@staticmethoddef run():print("这是一个静态方法")def speak(self):  # 实例方法print("这是一个实例方法")self.__rich()  # 私有方法在类里面可以访问def __rich(self):print("这是一个私有方法")

类的继承

主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。通过继承创建的新类称为子类或派生类,被继承的类称为基类、父类或超类
比如有个基类叫Animal,那么我们还需要造一个Person类以及Cat类,人和猫是不是都属于动物,那我们可以通过继承动物的方法,可以使用父类里面的方法和属性,可以少些很多方法,这就是代码的重用思想。

# 类的继承
# 父类也叫基类或超类
class Animal(object):def __init__(self,name,age):print("父类的初始化方法")self.name = nameself.age = agedef speak(self):print("%s会说"%self.name)def eat(self):print("%s会吃"%self.name)class Person(Animal):# 子类里面__init__方法没有,使用的是父类里面的初始化方法def speak(self):print("%s 会说人话"%self.name)class Cat(Animal):# 子类把父类里面的方法重写了,没有用super是不会走到父类里面的初始化方法def __init__(self,name,skill):self.name = nameself.skill = skilldef speak(self):print("%s 会喵喵叫"%self.name)class Dog(Animal):# 子类重写父类的init方法,并且需要走到父类的init方法,需要用到super方法def __init__(self,name,age,skill):super(Dog,self).__init__(name,age)self.skill = skilld = Dog("旺财",2,"会招财")
d.speak()
p = Person("李四",20)
p.speak()
c = Cat("小花猫","抓老鼠")
c.speak()

类的多态

其实多态也叫方法重写,比如有个基类叫Animal,里面有个方法叫speak,还有Person类以及Cat类继承Animal类,人和猫都会叫,但是人是啊啊啊的叫,猫是喵喵喵地叫,我们看看以下的例子:

class Animal(object):def __init__(self, name, age):self.name = nameself.age = agedef speak(self):print("会动")class Person(Animal):def speak(self):print(self.name, "啊啊啊~")class Cat(Animal):def speak(self):print(self.name, "喵喵喵~")p = Person("小明",10)
p.speak()
c = Cat("花猫", 20)
c.speak()

Python内置类属性

__name__方法

类名
在当前文件执行代码,__name__的值为"main", 如果为了调试代码,可以在当前文件下面加判断,在里面写上调试代码,其它文件引用该文件的时候不会执行判断里面的代码

class Animal(object):def __init__(self, name, age):self.name = nameself.age = ageprint(Animal.__name__)
print(__name__)
if __name__ == "__main__":print("此处写调试代码")

导入其它文件夹里面的类

在这里插入图片描述
比如我想从main.py文件里面导入test文件夹下面的animal.py里面的Animal类:
animal.py文件里面的代码:

class Animal(object):def __init__(self, name, age):self.name = nameself.age = ageprint(__name__)

即使我们把实例化animal注释了,会执行animal.py里面的print(name),结果是test.animal,打印的是文件夹下面的某个文件,所以我们定义类的文件如果本身执行或者调试的话,做个判断,加上以下这句话:

if __name__ == "__main__":启动本文件执行的代码,别的地方引用的时候不会执行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/129571.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSP 201312-1 出现次数最多的数

答题 用两个map&#xff0c;一个map记录每个数出现的次数并降序排序&#xff0c;另一个map将次数作为键&#xff0c;数本身作为值&#xff0c;降序排序&#xff0c;搞定 #include<iostream> #include<map> using namespace std; int main(){map<int,int,great…

git 合并分支某次(commit)提交

需求&#xff1a;将develop分支某次提交合并到master上面&#xff0c;其他修改不同步&#xff1b; //切换到master分支 git checkout master //查看develop分支提交记录&#xff0c;获取对应记录哈希值&#xff1b; git log develop // 按上下按钮可以上下查询对应记录&#xf…

获取该虚拟机的所有权失败,主机上的某个应用程序正在使用该虚拟机

点击“openstack-controller”虚机 打开出现如下错误&#xff0c;点击“获取所有权” 点击“取消” 这时候不要删除虚拟机&#xff0c;这种错误一般是由于虚拟机没有正常关闭引起的。 找到openstack-controller的虚拟磁盘文件及配置文件存放的位置&#xff0c;删除openstack-…

SpringBoot学习笔记(项目创建,yaml,多环境开发,整合mybatis SMM)

一、SpringBoot入门 1.1 SpringBoot概述 SpringBoot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化Spring应用的初始搭建以及开发过程。 Spring程序缺点&#xff1a;配置繁琐&#xff0c;依赖设置繁琐。SpringBoot程序优点&#xff1a;自动装配&#xff0c…

linux安装postgresql13

linux安装postgresql13 1. 安装postgresql131.1 安装1.2. 数据库初始化1.3.配置远程访问1.3.1 修改配置文件1.3.2 重启服务1.3.3 测试连接 1.4 卸载 2. 安装Postgis2.1 安装2.2 为数据库添加postgis2.2.1 查看文件2.2.2 为数据库添加postgis2.2.3 创建操作系统用户 3. 安装pgAd…

文件上传漏洞案例

目录 1.案例一 1&#xff09;案例源码 2&#xff09;创建web.php文件 3&#xff09;使用抓包软件 2.案例二 1&#xff09;案例代码 2&#xff09; 案例分析 3&#xff09;copy命令生成图片马 4&#xff09;上传图片马到服务器 5&#xff09;解析 文件图片 3.案例三 …

阿里云2核4G服务器5M带宽5年费用价格明细表

阿里云2核4G服务器5M带宽可以选择轻量应用服务器或云服务器ECS&#xff0c;轻量2核4G4M带宽服务器297元一年&#xff0c;2核4G云服务器ECS可以选择计算型c7、c6或通用算力型u1实例等&#xff0c;买5年可以享受3折优惠&#xff0c;阿腾云分享阿里云服务器2核4G5M带宽五年费用表&…

分布式AKF拆分原则

目录 1 前言2 什么是AKF3 如何基于 AKF X 轴扩展系统&#xff1f;4 如何基于 AKF Y 轴扩展系统&#xff1f;5 如何基于 AKF Z 轴扩展系统&#xff1f;6 小结 1 前言 当我们需要分布式系统提供更强的性能时&#xff0c;该怎样扩展系统呢&#xff1f;什么时候该加机器&#xff1…

驱动开发--day2(内核不同模块的相互访问、字符设备驱动、led控制实验代码及现象)

实现三盏灯的控制&#xff0c;编写应用程序测试 head.h #ifndef __HEAD_H__ #define __HEAD_H__#define LED1_MODER 0X50006000 #define LED1_ODR 0X50006014 #define LED1_RCC 0X50000A28#define LED2_MODER 0X50007000 #define LED2_ODR 0X50007014#endif mychrdev.c #inc…

YOLOv5算法改进(16)— 增加小目标检测层

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。小目标检测层是指在目标检测任务中用于检测小尺寸目标的特定网络层。由于小目标具有较小的尺寸和低分辨率&#xff0c;它们往往更加难以检测和定位。YOLOv5算法的检测速度与精度较为平衡&#xff0c;但是对于小目标的检测效…

电容笔值不值得买?开学季比较好用的电容笔

眼看着新学期即将到来&#xff0c;到底应该选择什么样的电容笔&#xff1f;一款原装的苹果Pencil&#xff0c;就卖到了将近一千块&#xff0c;这对于很多人来说&#xff0c;都是一个十分昂贵的价格。事实上&#xff0c;由于平替电容笔的价格非常便宜&#xff0c;只要一二百元就…

Shell命令管理进程

Shell命令管理进程 列出进程 ps命令 top命令 管理后台进程 启动后台进程 查看后台进程 jobs和ps的区别 停止进程 Linux除了是一种多用户操作系统之外&#xff0c;还是一种多任务系统。多任务意味着可以同时运行多个程序。Linux 提供了相关的工具来列出运行中的进程,监视…

库的相关操作

目录 一、创建数据库 1&#xff0c;创建数据库规则 2、创建案例 二、字符集和校验规则 1、查看系统默认字符集以及校验规则 2、查看数据库支持的字符集以及校验规则 3、校验规则对数据库的影响 三、操纵数据库 1、查看数据库和目前所在数据库 2、显示创建语句 3、修改数据库 4、…

windows环境下node安装教程(超详细)

安装node.js 1、下载node: 下载地址&#xff1a;下载 | Node.js 中文网 node.js的zip包安装时是直接解压缩后就可以了, node.js的msi包是傻瓜式一路next就可以了 选择一中方式就可以 2、解压后的目录,或者mis安装后的目录如下: 3、安装完后&#xff0c;可以在命令行中输入…

c高级day4(9.11)shell脚本(case ....in语句,循环语句,select ...in和case...In结合,辅助控制关键字,函数)

1.实现一个对数组就和的函数&#xff0c;数组通过实参传递给函数 2.写一个函数&#xff0c;输出当前用户的uid和gid&#xff0c;并使用变量接收结果 #!/bin/bash read -a arr sum0 function add() { …

【易盾点选】

拿官网的点选做个例子吧&#xff0c;比较省事&#xff0c;水一篇~ ​ 官网的接口目前都改成V3了&#xff0c;多了个dt参数&#xff0c;以及加密的一个函数也变动了下 点选坐标在这&#xff0c;加密函数未变&#xff0c;用逗号拼接 整个加密里的函数变了&#xff0c;直接重新…

RedisJava基础代码实现

Jedis快速入门 <!--jedis--> <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.7.0</version> </dependency> <!--单元测试--> <dependency><groupId>org.ju…

人工智能AI 全栈体系(一)

第一章 神经网络是如何实现的 这些年人工智能蓬勃发展&#xff0c;在语音识别、图像识别、自然语言处理等多个领域得到了很好的应用。推动这波人工智能浪潮的无疑是深度学习。所谓的深度学习实际上就是多层神经网络&#xff0c;至少到目前为止&#xff0c;深度学习基本上是用神…

华为云云耀云服务器L实例评测|有关华为云云耀云服务器L实例你可能不知道的事情

前言 最近华为云推出了华为云云耀云服务器L实例。主打一个轻量级云服务器&#xff0c;即开即用&#xff0c;轻松运维&#xff0c;开启简单上云第一步。具有智能不卡顿&#xff0c;价优随心用&#xff0c;上手更简单&#xff0c;管理特省心。 在推出的第一时间我就买了一台来耍…