与java类似,python作为一种面向对象的编程语言,也可以创建自定义的对象和类。

它的特性主要有:继承,封装,多态,方法,属性,超类

1.变量的作用域

c = 50      #全局变量, 作用域为整个模块,若被引用,可作用域整个包

def plus(x,y):
c = x + y # 局部变量, 为函数中定义的变量,在函数外可被引用
print(c) plus(1,2)
print(c) # 函数内部定义的变量只作用与函数内部
>
3
50

两者转换

def demo():
global c # global 定义一个全局变量, 可被引用
c = 2 demo()
print(c) # 先调用函数,再输出
> 2

2.类与构造方法

每个类对应每个对象,下面有类变量

起到封装变量,封装函数,代码的作用

2.1定义一个类

格式

class 类名:  #首字母最好大写
代码块
class Student:               #命名,首字母大写
name = '名字'
age = 0 def __init__(self):
#构造函数, 无需调用直接运行 在给对象的赋值语句中即可运行
print('在创建类对象时先运行构造函数')
return None #只能返回none 不可人为指定 def grape(self, score): # 与java类似,self指向对象本身
print(self.name + "的成绩是" + str(score)) bob = Student()
> 在创建类对象时先运行构造函数

实例化类,给类赋值

student = Student()              #实例化
student.grape(100) #调用
>
在创建类对象时先运行构造函数
bob的成绩是100

2.2构造函数

在创建对象时,就会被调用运行

可以没有

可以在构造函数中, 初始化对象的属性

  • 不需要传参的构造函数
def __init__(self):
pass
  • 需要传参的构造函数,需要有self,指向对象,与类无关
def __init__(self, name, age):
pass
  • 上面两种形式可以同时存在,也可以只存在一种

2.3关于self

  • self只有在类的方法中才会有,独立的函数或方法是不必带有self的
  • self在定义类的方法时是必须有的,但在调用时不必传入相应的参数
  • self名称不是必须的,在python中self不是关键词,你可以定义成a或b或其它名字都可以
  • self指向对象本身
  • 调用构造函数时,可以通过 在类后面()的方式调用
class Dog:
def __init__(self):
print('This is a dog.') dog()
> This is a dog.

调用实例方法时,通过对象调用

class School:               #命名,首字母大写
name = '未定义'
age = 0 def __init__(self,name1,age1):
name = name1
print(name)
age = age1
return None #只能返回none 不可人为指定 #调用构造函数时,通过 在类后面()的方式调用
#调用实例方法时,通过对象调用
School1 = School(name1 = '中华小学',age1 = '80')
School2 = School(name1 = '安徽小学',age1 = '70')

类中函数的实例变量与实参不同

def __init__(self,name1,age1):
#可在()内, 加变量 在引用时,定义变量的值
#通过 self 来保存特征值
self.name = name1
#通过 self 来定义实例变量和访问实例变量
self.age = age1
#self.变量属性 = 变量名(形参)

2.5实例变量与类变量

实例变量:

顾名思义,通过创建对象实例化产生,通过对象进行引用。在类内部表现为:self.变量名

类变量:直接与类本身相关,与对象无关,直接在类中被定义,可以转变为实例变量

当出现对象名.变量名 引用变量时,先对类里面的实例变量进行寻找,若无,则再去类变量中寻找

class Dog:
name = 'None' # 类变量
nickname = 'Name' # 类变量
def __init__(self, name): # 这里name为函数形参
self.name = name # 赋值实例变量 bob = dog('bobo')
print(bob.name)
print(bob.nickname)
>
bobo
None

一个例子

class School():               #命名,首字母大写
name = '未定义'
age = 0
sum = 0 # 与类相关的变量
color = 'yellow'
squire = '面积' def __init__(self,name1,age1,color1,squire1): name = name1
age = age1
self.color = color1
self.squire = squire1
return None School1 = School(name1 = '中华小学',age1 = '80',color1 = 'blue',squire1 = '1000')
print(School1.name,' ', School1.age) #此时打印出了 类变量 (先在 实例变量 中查找,无, 则到类变量中找)
print(School1.__dict__) #以字典的形式输出 School1 的变量
print(School.name)
print(School1.color,' ', School1.squire)
print(School.__dict__)

2.4实例方法

格式

def 方法名(self, 形参): # self必须有 形参可有可无
代码块

2.5类方法与类变量

类方法的基本格式

@classmethod            #为装饰器
def plus_sum(cls): #cls 为class 的缩写 作用与self类似
pass

类变量:只与类相关

__class__.变量名 或者是在类方法中的 cls.变量名
两者虽然表现形式不同,但为同一变量 `is`

下面的例子,很好地通过实例变量与类变量进行班级人数和年龄的统计

class classroom:
sum = 0
age = 0
def __init__(self,name,age):
self.__class__.sum += 1 # 总人数加一
self.age = age
self.__class__.age += self.age # 学生年龄和
age = self.__class__.age/self.__class__.sum
print('当前班级学生总人数为:' + str(self.__class__.sum))
print('当前班级的平均年龄为:' + str(age)) @classmethod
def plus_sum(cls): # 利用类变量进行加和
print('班级总人数为: ' + str(cls.sum)) classroom.student1 = classroom(name = '憨批', age = 10)
classroom.student2 = classroom(name = '小逗比', age = 9)
classroom.student3 = classroom(name = '土豆',age = 8)
classroom.plus_sum() # 通过类来调用 方法
classroom.student1.plus_sum() # 通过对象来调用方法

2.6静态方法

  • 用的不多 与类 实例方法 关联不大 与普通函数区别不大

格式:

@staticmethod       # 装饰器
def add(x,y):
print('This is a static method')
  • 类中的静态方法,可以访问类变量,对于实例变量和其他函数变量,无法访问
  • 类中的静态方法,可以通过类直接调用,无需实例化
class Company:
sum = 0
bass_name = '刘大钞'
def __init__(self,staff_a,staff_b,staff_c):
self.staff_a = staff_a
self.staff_b = staff_b
self.staff_c = staff_c
Company.sum = staff_a + staff_b + staff_c @staticmethod # 装饰器
def add(x,y): # 与类方法实例方法不同,()内无需强制添加变量
print('This is a method')
print(Company.bass_name) # 正常引用类变量
print(x + y) #引用形参
print(self.staff_a) #报错
print(staff_a) #报错 Company1 = Company(staff_a = 10,staff_b = 20,staff_c = 30)
Company1.add(1,2)
Company.add(1,2) #可正常被调用

python学习笔记:第七章面向对象的更多相关文章

  1. [Python学习笔记][第七章Python文件操作]

    2016/1/30学习内容 第七章 Python文件操作 文本文件 文本文件存储的是常规字符串,通常每行以换行符'\n'结尾. 二进制文件 二进制文件把对象内容以字节串(bytes)进行存储,无法用笔 ...

  2. 流畅的python学习笔记第七章:装饰器

    装饰器就如名字一样,对某样事物进行装饰过后然后返回一个新的事物.就好比一个毛坯房,经过装修后,变成了精装房,但是房子还是同样的房子,但是模样变了. 我们首先来看一个函数.加入我要求出函数的运行时间.一 ...

  3. Python学习笔记(七)

    Python学习笔记(七): 深浅拷贝 Set-集合 函数 1. 深浅拷贝 1. 浅拷贝-多层嵌套只拷贝第一层 a = [[1,2],3,4] b = a.copy() print(b) # 结果:[ ...

  4. JVM学习笔记-第七章-虚拟机类加载机制

    JVM学习笔记-第七章-虚拟机类加载机制 7.1 概述 Java虚拟机描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被 ...

  5. #Python学习笔记:1-3章 (基于《python编程,从入门到实践)

    第1-3章 这个文档是记录我学习python时一些学习笔记以及一些想法也可以称作复习笔记 第一章:起步这一章主要是从第一个"hello world"程序到python环境的搭建与配 ...

  6. [Python学习笔记][第五章Python函数设计与使用]

    2016/1/29学习内容 第四章 Python函数设计与使用 之前的几页忘记保存了 很伤心 变量作用域 -一个变量已在函数外定义,如果在函数内需要修改这个变量的值,并将这个赋值结果反映到函数之外,可 ...

  7. [Python学习笔记][第四章Python字符串]

    2016/1/28学习内容 第四章 Python字符串与正则表达式之字符串 编码规则 UTF-8 以1个字节表示英语字符(兼容ASCII),以3个字节表示中文及其他语言,UTF-8对全世界所有国家需要 ...

  8. python学习笔记-(十)面向对象基础

    面向对象相关知识简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类变量:类变量在整个实例化的对象中是公用的.类变量定义 ...

  9. o'Reill的SVG精髓(第二版)学习笔记——第七章

    第七章:路径 所有描述轮廓的数据都放在<path>元素的d属性中(d是data的缩写).路径数据包括单个字符的命令,比如M表示moveto,L表示lineto.接着是该命令的坐标信息. 7 ...

  10. [Python学习笔记][第六章Python面向对象程序设计]

    1月29日学习内容 Python面向对象程序设计 类的定义与使用 类定义语法 使用class关键词 class Car: def infor(self): print("This is ca ...

随机推荐

  1. 一文吃透Arthas常用命令!

    Arthas 常用命令 简介 Arthas 是Alibaba开源的Java诊断工具,动态跟踪Java代码:实时监控JVM状态,可以在不中断程序执行的情况下轻松完成JVM相关问题排查工作 .支持JDK ...

  2. mysql迁移:mysqldump导出数据库

    问题描述:要将一个mysql中六个数据库导出来,使用mysqldump导出 mysqldump使用语法:mysqldump -uroot -p -S /data/mysql/db_itax_m/mys ...

  3. Amazon S3 对象存储Java API操作记录(Minio与S3 SDK两种实现)

    缘起 今年(2023年) 2月的时候做了个适配Amazon S3对象存储接口的需求,由于4月份自学考试临近,一直在备考就拖着没总结记录下,开发联调过程中也出现过一些奇葩的问题,最近人刚从考试缓过来顺手 ...

  4. C# 笔迹擦除8边形

    擦除区域与橡皮大小不一致 测试反馈,擦除区域与真实的橡皮大小不一致: 上图中,橡皮显示是圆形的,但擦除效果是一个"8边形"区域. 找了一台8K屏,确实是能复现的: 看到这个诡异的8 ...

  5. GPT护理机器人 - 让护士的工作变简单

    引子 书接上文<GPT接入企微应用 - 让工作快乐起来>,我把GPT接入了企微应用,不少同事都开始尝试起来了.有的浅尝辄止,有的刨根问底,五花八门,无所不有.这里摘抄几份: "帮 ...

  6. “StackLLaMA”: 用 RLHF 训练 LLaMA 的手把手教程

    如 ChatGPT,GPT-4,Claude语言模型 之强大,因为它们采用了 基于人类反馈的强化学习 (Reinforcement Learning from Human Feedback, RLHF ...

  7. 2023-01-06:给定一个只由小写字母组成的字符串str,长度为N, 给定一个只由0、1组成的数组arr,长度为N, arr[i] == 0表示str中i位置的字符不许修改, arr[i] ==

    2023-01-06:给定一个只由小写字母组成的字符串str,长度为N, 给定一个只由0.1组成的数组arr,长度为N, arr[i]等于 0 表示str中i位置的字符不许修改, arr[i] 等于 ...

  8. 声音好听,颜值能打,基于PaddleGAN给人工智能AI语音模型配上动态画面(Python3.10)

    借助So-vits我们可以自己训练五花八门的音色模型,然后复刻想要欣赏的任意歌曲,实现点歌自由,但有时候却又总觉得少了点什么,没错,缺少了画面,只闻其声,却不见其人,本次我们让AI川普的歌声和他伟岸的 ...

  9. web自动化01-环境搭建

    1.自动化测试是什么? 借助工具实现 借助代码编写脚本实现  2.自动化测试需要掌握那些? web自动化测试基础 移动端自动化基础 pytest自动化测试框架 po设计模式 数据驱动 日志模块使用 自 ...

  10. 玩转服务器之网站篇:新手使用WordPress搭建博客和静态网站部署

    静态网站部署和WordPress搭建博客都是网站运营中常见的工作.静态网站是一种不需要服务器端脚本的网站形式,通常使用HTML.CSS和JavaScript等静态资源进行构建和显示.而WordPres ...