Python快速入门学习笔记:第四天

python从入门到精通第三版,python入门到精通pdf微盘 大家好,本文将围绕python3.8从入门到精通pdf百度云下载展开说明,python入门到精通pdf百度云是一个很多人都想弄明白的事情,想搞清楚python从入门到精通第三版需要先了解以下几个事情。大家好,本文将围绕python3.8从入门到精通pdf百度云下载展开说明,python从入门到精通电子书下载是一个很多人都想弄明白的事情,想搞清楚python从入门到精通pdf免费下载需要先了解以下几个事情。 阅读详情

这个是为准备考研复试,希望做一个textCNN文本情感分析打语言基础的自学笔记,博主本身本科非计算机专业,如果网友们有幸看见本文,博客中内容如有疏漏,不吝赐教。

第6节 类

6.1 类定义

  和之前所学习的面向对象的语言一样,Python也提供类的概念,同样适用关键字class定义一个类,一个类可以拥有一个对象的属性和方法。具体代码示例如下:

class Student:

    age = 18 # 类属性
	# 构造器初始化对象
    def __init__(self, name, score):
        # self必须为第一个参数
        # Python中的self类似于C++中的self指针,Java中的this关键字
        self.name = name
        self.score = score

    def print_score(self):
        # self必须为第一个参数
        print("{0}的分数是:{1}".format(self.name, self.score))

在调用实例方法时,不需要也不能给self传参,由解释器自动传参。在调用时,同样通过类名调用构造函数。如:

s1 = Student("Li Ming", 18)
s1.print_score()

同时,除了可以在类中定义某个类属性,还可以在类的外部临时加入某个属性,例如:对上面的Student类临时加入一个salary属性

s1.salary = 5000
print(s1.salary) # 此类属性为临时加入,仅仅是被实例化后的s1有此属性。

同时也可以使用dir()函数来查看本类的一切方法,使用__dict__来查看对象属性字典,使用isinstance()判断是否为实例化对象:

print(dir(s1))  # dir可获得对象的所有方法
print(s1.__dict__) # 获得对象的属性字典
print(isinstance(s1, Student)) # 判读是否为实例化对象

6.2 类方法与静态方法

  类方法是从属于类对象的方法,通过装饰器@classmethod定义,具体格式如:

class class_name:
		@classmethod
        def obj_name(cls, [ ,list]):
            ... 
           # code_block
            ...

要点在于:

  • @classmethod必须位于方法名上面;
  • 第一个cls必须有
  • 调用类方法的格式:obj_name.method_name(para_list_name)
  • 参数列表无需,也不能给cls传值
  • 类方法中访问实例属性和实例方法会导致错误
  • 子类继承父类时,传入的是子类的方法而不是父类
  • 实例方法操作实例属性,类方法操作类属性
    在这里插入图片描述
    关键点在于,实例方法存在了一个隐藏参数self,类方法存在一个隐藏参数cls,而静态方法两者皆无。。那么我们可以推出一个逻辑:实例方法被实例调用,类方法被类调用,静态方法两者皆可调用。
class mode_class:

    company = 'ByteDance'

    def normalMethod(self, company):
        print(self.company)

    @classmethod
    def classMethod(cls, company):
        print(cls.company)

    @staticmethod
    def staticMethod(company):
        print(company)


my_class = mode_class()
my_class.company = "New"
print(my_class.normalMethod("Normal"))	
# print(mode_class.normalMethod("Class"))     # Error
print(my_class.classMethod("Normal"))
print(mode_class.classMethod("Class"))
print(my_class.staticMethod("Normal")) # 输出方法内部分
print(mode_class.staticMethod("Class"))# 输出方法内部分

最后的输出结果是:

New
None
ByteDance
None
ByteDance
None
Normal
None
Class
None

最后需要注意的是,实例方法和静态方法调用的区别。
总结来讲是:

  • 实例方法随着实例化的属性改变而变,如新定义的new覆盖了原来类中的ByteDance
  • 类方法,使用了类属性的内容不会随着实例属性改变
  • 静态方法不可访问类属性,直接传入新加入方法中的内容。
  • 不想看见报错,就别用类调用实例方法。

6.3 __ del __与__call __

   __del__方法称为析构方法,用于实现对象被销毁时所需要的操作,如:释放占用的资源。Python实现自动的垃圾回收,当对象没有被引用时,由垃圾回收器调用此方法。我们也可以使用del语句从而保证调用了__del__方法。系统也会自动提供__del__方法,一般不需要自定义析构方法。

class Person:
    def __del__(self):
        # 重写一个假的del方法
        print("销毁对象:{0}".format(self))


p1 = Person()
p2 = Person()
del p2
print("程序结束") # 自行调用了del方法,销毁p1

  定义了__call__方法的对象,被称为“可调用对象”,也就是说:有此方法的对象可以被像函数一样调用,其使用方式可以像函数一样。

class SalaryAccount:
    # 工资计算类
    def __call__(self, salary):
        print("Accounting")
        yearSalary =salary*12
        daySalary = salary//22.5
        hourSalary = daySalary//8
        return dict(yearSalary=yearSalary, daySalary=daySalary, hourSalary=hourSalary)


s = SalaryAccount()
print(s(5000))

可以看见,被定义的SalaryAccount类在实例化一个s对象之后,s对象可以像函数一样向其中传参。

6.4 方法重载与动态性

Python中没有方法的重载,新定义的方法会将上一个同名方法覆盖

class Person:
    def say_hi(self):
        print("Hello!")

    def say_hi(self, name): # 将上一个覆盖
        print("{0},hellow!".format(name))


p1 = Person()
# p1.say_hi()  此句error
p1.say_hi("Li")
# 输出:Li,hellow!

可见在Python中的方法并不需要重载,也无法重载。

  但是,python是一个解释性语言,也在动态中执行。类属性一样,类属性可以临时性的新加入进某个实例化的对象中,成为实例化对象的一个新属性。

class Person:

    def say_hi(self):
        print("Hello!")


def new_action(s):
    print("New{0}".format(s))


Person.new_a = new_action # 先加入到类中
p1 = Person()
p1.say_hi()
p1.new_a()

不过与临时加入类属性不同的是,这样动态加入的方法必须要先加入到类中,而不是直接像类属性那样直接声明。另外,函数也是对象,实际上是new_action这个“对象”把地址给了Person类中的new_a。

甚至,可以新定义一个方法来覆盖掉原本类中的方法:

class Person:

    def say_hi(self):
        print("Hello!")


def new_say_hi(s):
    print("Hellow!")


p = Person()
Person.say_hi = new_say_hi # 尝试覆盖原本say_hi
p.say_hi()

但是注意到一个问题:为什么我必须在新定义的方法参数列表中放一个s做参数呢,当我把它去掉时,将会有下面报错:

TypeError: new_say_hi() takes 0 positional arguments but 1 was given

也就是说,解释器不需要我为这个方法提供参数但是提供了一个。Python在类中定义方法的时候,方法会被传当前对象的地址,所以一般在类中定义方法的时候,必须在方法中至少定义一个参数,将其命名为"self"。但是实例方法的第一个参数可以叫任意参数名。

也是就是说:我们完全可以在实例方法中任意定义一个变量来顶替原本需要的self

6.4 私有化

和其他语言不一样的是,Python对于类成员没有严格访问控制,关于私有属性和私有方法有具体如下要求:

  • 通常约定,双下划线开头为私有的,其他为公共的
  • 类内部可访问私有属性和方法
  • 类外部不能直接访问私有属性和方法
class Employee:

    __company = "OK!"

    def __init__(self, name, age):
        self.name = name
        self.__age = age    # 私有化属性

    def __work(self):
        print("private")
        print("年龄:{0}".format(self.__age))  # 一定要加双下划线
        print(Employee.__company)


e = Employee("LI", 18)
print(e.name)
# print(e.age)    # 不可访问
print(e._Employee__age)
# 可访问
print(dir(e))
# e.__work() # 不可访问
e._Employee__work()

如果要完善封装的思想,可以利用像java中的get和set方法。

class Student:

    def __init__(self, name, age):
        self.__name = name
        self.__age = age

    def get_name(self):
        return self.__name

    def set_name(self, name):
        self.__name = name

    def get_age(self):
        return self.__age

    def set_age(self, age):
        self.__age = age


stu = Student("Ada", 18)
print(stu.get_name())
stu.set_age(24)
print(stu.get_age())

6.5 装饰器@property

@property可以把一个方法调用变为属性调用:类方法——>类属性

class Number:

    @property
    def trans_num(self):
        return 10
    
num = Number()
print(num.trans_num)
# print(num.trans_num())  传统的方法调用方式将会报错
print(type(num.trans_num)) 

输出结果为:

10
<class 'int'>

等效于get和set方法的代码可以写成

class Student:

    def __init__(self, name, age):
        self.__name = name
        self.__age = age

    @property
    def studentName(self):
        return self.__name

    @studentName.setter  # 方法名.setter
    def studentName(self, name):
        self.__name = name

    @property
    def studentAge(self):
        return self.__age

    @studentAge.setter	# 方法名.setter
    def studentAge(self, age):
        self.__age = age


stu = Student("Ada", 18)
print(stu.studentName)
print(stu.studentAge)

stu.studentName = "Alice"
stu.studentAge = 24

但也有不一样的是,setter修饰的方法不能放在被修饰的方法名前面,比如:

	# 这样做是不允许的
    @studentAge.setter	# 方法名.setter
    def studentAge(self, age):
        self.__age = age
    @property
    def studentAge(self):
        return self.__age

这个问题等以后深入Python学习的时候再继续追究。

python从入门到精通第三版,python3.8从入门到精通pdf 大家好,本文将围绕python3.8从入门到精通pdf百度云下载展开说明,python从入门到精通电子书下载是一个很多人都想弄明白的事情,想搞清楚python从入门到精通pdf免费下载需要先了解以下几个事情。熟悉Python的都知道,Python书籍中有著名的三剑客,即Python编程三剑客”:《Python编程:从入门到实践》+《Python编程快速上手-让繁琐工作自动化》+《Python极客项目编程-完整版》。这三个书被称为Python三剑客。 阅读详情

相关推荐

Windows Server 2012评估版过期自动关机问题:两种高效解决方案详解

本文针对Windows Server 2012评估版过期导致的自动关机问题,提供了两种高效解决方案。一是通过slmgr.vbs命令重置授权,临时延长评估期;二是使用DISM工具将评估版转换为正式版,一劳永逸。文章详细解析了两种方法的操作步骤、注意事项及适用场景,帮助用户快速恢复服务器稳定运行。

pytorchlight8的博客 1195

Python 错误之函数takes 0 positional arguments but 1 was given

class User(): def __init__(self,fname,lname): self.fname=fname self.lname=lname def show_(self): print(self.fname.title()+self.lname.title())users=User('harry ','potter')

拾遗 15万+

机器学习-02 模型的评估与选择

2.1 误差与过拟合 我们将学习器对样本的实际预测结果与样本的真实值之间的差异成为:误差(error)。定义: 在训练集上的误差称为训练误差(training error)或经验误差(empirical error)。 在测试集上的误差称为测试误差(test error)。 学习器在所有新样本上的误差称为泛化误差(generalization error)。 显然,我们希望得到的是在新样本上表现得很好的学习器,即泛化误差小的学习器。因此,我们应该让学习器尽可能地从训练集中学出普适性的“一般特征”,这

一个小白 1705

Python 调用对象方法报 takes 0 positional arguments but 1 was given的解决办法

Python 调用对象方法报 takes 0 positional arguments but 1 was given的解决办法

sinat_34979820的博客 1万+

PL端:HDMI 输出实验

开发板没有HDMI编码芯片,是将FPGA的3.3差分IO直接连接到HDMI连接器,FPGA 完成 24 位 RGB 编码输出TMDS 差分信号。1、学会使用第三点IP核,首先是添加,后面的使用和自带IP核操作一致。2、主要还是在梳理vivado使用流程。

qq_43441284的博客 4287

从解压到编译:手把手带你用TeXstudio搞定第一篇ACM LaTeX论文

本文详细指导如何使用TeXstudio从解压ACM LaTeX模板到成功编译第一篇学术论文的全过程。涵盖环境准备、模板配置、TeXstudio设置及常见问题排查,特别针对ACM会议论文格式要求,帮助学术新人快速掌握LaTeX写作技巧。

weixin_30655569的博客 254

python报错(二):takes 0 positional arguments but 1 was given

python报错(二):takes 0 positional arguments but 1 was given

翼同学 7169

Python 爬虫实战:爬取股票数据做 K 线图可视化

摘要:本文介绍基于Python的股票数据爬取与K线图可视化全流程技术方案。通过Requests库抓取东方财富网股票数据,使用Pandas进行清洗处理,并利用mplfinance库实现专业K线图绘制。文章详细讲解了数据爬取接口分析、反爬策略配置、K线图绘制方法(包含基础K线图和带均线的进阶版本),以及核心统计指标计算。该方案可应用于股票价格趋势分析,为投资决策提供数据支持,同时强调了数据使用的合规性和技术优化方向。

2503_91057718的博客 2046

Python面向对象

写在前面     时间的高效利用; 前言:   补充 is 和 == 的区别,整理如下:Python中变量的属性以及判断方法 一、面向过程和面向对象   - 1.面向过程     核心是过程,过程就是解决问题的步骤;流水线、机械式;    优点:复杂的问题简单化,分成多个功能单元;    缺点:可扩展性差    应用:Linux内核、httpd、git   - 2.面向对象 ...

weixin_30477797的博客 251

Uncaught ReferenceError: process is not defined

这个错误 Uncaught ReferenceError: process is not defined 通常出现在浏览器环境中,因为 process 是 Node.js 环境的内置对象,并不是浏览器原生支持的。因此,浏览器无法识别 process,导致该错误。在App.vue中加上以下代码就能够有效解决。

猿小白的博客 1740

实战避坑:基恩士KV8000 PLC与C#上位机链路通讯全流程实现(含ST代码+上位机源码)

本文详细讲解了基恩士KV8000 PLC与C#上位机的TCP链路通讯实现,从PLC端的ST代码编写、通讯配置,到上位机的通讯类封装、界面实现,再到实战避坑和性能优化,提供了完整的可复用方案。该方案已在实际产线项目中验证,支持实时数据采集和控制指令下发,稳定性和可靠性满足工业场景需求。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1176

takes 0 positional arguments but 1 was given (python错误记录)

takes 0 positional arguments but 1 was given (python错误记录) C=Circle(2) print(C.Area()) R=Rectangle(2,4) print(R.Perimeter()) 实现的是一个关于圆和长方形的类的练习 报错的代码:print(C.Area()) TypeError: Area() takes 0 position...

爱学习的米斯特儿江的博客 8087

如何在非序列模式下使用类似图像模功能

如何在非序列模式下使用类似图像模功能

weixin_72050316的博客 552

Python七天快速入门——第一天

本教程直接从语言入手,旨在让没有编程基础以及具有一点程序基础的快速上手Python,

苦走一口田 2340

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Python七天快速入门——第四天(下)

本教程直接从语言特性入手,旨在让没有编程基础的小白或者其他语言领域大佬快速上手Python,本文只介绍最基础内容,深入使用Python不在本教程范围😉

苦走一口田 1392

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

如何快速赚钱 Python爬虫

如何快速赚钱 Python爬虫

qq_43678748的博客 2170

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【Python】快速入门Python一天学完基础语法

快速入门python 1. 数据类型与变量:元组、字典、拆包等 2. 基础运算与控制流程 3. 方法/函数、异常处理 4. 面向对象

CoderSharry的博客 2348

Python爬虫如何快速入门

写了几篇网络爬虫的博文后,有网友留言问Python爬虫如何入门?今天就来了解一下什么是爬虫,如何快速的上手Python爬虫。

学而思(xiejava的blog) 2151

Python快速入门教材推荐!

Python作为现在很热门的一门编程语言,介于Python的友好,许多的初学者都将其作为首选,为了帮助大家更好的学习Python,我筛选了2年内优秀的python书籍,个别经典的书籍扩展到5年内。 python现在的主流版本是3.7(有明显性能提升,强烈推荐) 3.6, 不基于这两个或者更新版本的书,慎重选择。很多库已经不提供python2支持,请尽快从python迁移到python3.7。...

大数据hadoop开发学习 9963

Python快速入门PDF下载:快速掌握Python基础的不二选择

Python快速入门PDF下载:快速掌握Python基础的不二选择 去发现同类优质开源项目:https://gitcode.com/ 在编程语言的世界中,Python以其简洁的语法和强大的功能赢得了无数开发者的喜爱。今天,我们要推荐的这个开源项目——Python快速入门PDF下载,是帮助初学者快速掌握Python基础知识的绝佳资源。 项目介绍 Python快速入门PDF下载项目,为您提供了一本全面...

gitblog_06704的博客 521

Python快速入门学习笔记:第一天

这个是为考研复试要做textCNN文本情感分析打语言基础的自学笔记,博主本身本科非计算机专业,如果网友们有幸看见本文,播客中内容如有疏漏,不吝赐教。 第0节:从零开始   按照编译器翻译的两种方式:分为编译和解释。当编译器以解释方式运行的时候,也称之为解释器。Python也具解释性语言的优势,虽然效率不如编译性语言但跨平台能力。   Python所具有的特点:完全面向对象、强大的标准库、大量的...

PandaNotPan的博客 706

python快速编程入门笔记,《python编程快速上手》

人生苦短,我学python。python编程语言在各种榜单上经常拿到前列位置,在全球范围内都非常受欢迎python新手代码练习。Python作为一种不受局限、跨平台的开源编程语言,其数据处理速度快、功能强大且简单易学。而且,Python采用解释运行的方式,编写后无需进行编译即可直接通过解释器执行,具有典型的动态语言特点,编程效率极高。不仅如此,Python的应用范围也非常广泛,在数据分析、人工智能、网络爬虫、运维测试都多个领域都有应用。想要入门和深入学习python,以下书籍不容错过!

小发猫 475

Python学习笔记资源介绍:零基础入门教程,轻松掌握Python编程

Python学习笔记资源介绍:零基础入门教程,轻松掌握Python编程 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在当今信息时代,Python以其高效、简洁和易学的特点,成为广大编程爱好者的首选语言。今天,我们为您推荐的开源项目《Python学习笔记.pdf》正是一本专为编程新手量身定制的入门教程,帮助您从零开始,轻松掌握Python编程。 项目技术分析 《Pyt...

gitblog_06785的博客 471

Python快速入门

本文主要是对Python的一个快速入门,学习Python的基本语法。如果你当前并没有学习过Python的话,推荐可以花两小时通过这篇文章来一个快速入门

热爱编程、热爱生活、热爱探索 1964

python快速入门第三版-Python 快速入门:第3版 配套资源 PDF 完整版

给大家带来的一篇关于Python入门相关的电子文档资源,介绍了关于Python、快速入门方面的内容,本书是由Python官网出版,格式为PDF,资源大小23 MB,码小辫编写,目前豆瓣、亚马逊、当当、京东等电子书综合评分为:8.5。内容介绍Python 快速入门(第3版)配套资源这是一本Python快速入门书,基于Python 3.6编写,分为4个部分,第一部分讲解Python的基础知识,对Pyt...

weixin_37988176的博客 1175
上一篇: Python快速入门学习笔记:第三天
下一篇: Python快速入门学习笔记:第五天
Panda不姓潘
博客等级 码龄8年 152粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值