昨天简单的认识类怎么定义,什么是类,类如何调用。今天的笔记会大概补充一些内容,明天的笔记会细致讲解,加深个印象即可

今天我们在了解下:类的属性,类属性属于类也属于实例化对象。也就是说类的实例化对象可以调用类属性,同样的类也可以调用。看下代码:

 class person(object):   #定义person()类
gongtong = '吃饭' #类属性 def __init__(self): #构造函数
pass #实例化一个对象
per_1 = person()
print(per_1.gongtong) #用实例化对象per_1调用类中的类属性是可以调用的 print(person.gongtong) #直接用类调用类属性也是可以的

  在类中,无论你写没有写构造函数,其实都是默认有一个构造函数的,构造函数可以初始化参数属性,而且类中允许有多个构造函数的存在。但是建议一个类中一个构造函数。

 class person(object):   #定义person()类

     def __init__(self,name,age):  #构造函数,定义两个参数
self.name=name
self.age=age def __init__(self,address): #构造函数,定义一个参数
self.address=address #实例化一个对象
per_1 = person('北京') #如果只有一个参数,是会传给第二个构造参数的

  我们发现如果有很多参数需要传入到构造函数,我们将会很麻烦,要不在一个构造函数中添加多个参数变量,或者创建多个构造函数。这两个办法显然是不合适的,所以我们在前面的函数中讲过动态参数,也是可以用在这里的:

 class person(object):   #定义person()类

     def __init__(self,*name):  #构造函数,*号表示动态参数
self.name=name
print(name) #打印看下是不是传入了多个参数 #实例化一个对象
per_1 = person('媛媛','红红','君君') #构造函数中有动态关键字参数,所以我们传入多个参数都是可以的,而且是元组形式返回

再看一个小案例:

 class person(object):
def __init__(self,**kwargs): #动态参数,在参数很多的时候,动态参数是很好用哦
self.kwargs = kwargs def info(self):
print(list(self.kwargs.values())[0]) #python3中values()方法,是以迭代器形式返回的列表,所以去元素需要用list转换下 per_1 = person(name = 'liu')
per_1.info() #调用内部info()函数 per_2 = person(name = 'hong',age = 18)
per_2.info()

接下来我们认识下什么是【析构函数】,析构函数的执行顺序大家一定要注意哦:

实例化对象后,先被执行的是:类的构造函数(初始化),--->执行:开始调用某个方法函数 ---》执行:具体调用的方法内部代码块儿---》最后执行:析构函数
我们看下代码的实现:
 class person(object):

     def __init__(self):
print('我是构造函数') #会第一个打印它的内容 def __del__(self):
print('我是析构函数') #会最后打印析构函数的内容,析构函数不论执行 def info_A(self):
print('我是方法A') #会第二个执行被调用方法的内容 per_1 = person()
per_1.info_A()

前面的几个小案例中,类中的方法都是普通方法,比如:

普通方法:默认有(self)参数,且只能被类对象调用

 class person(object):
def conn(self,user,passwd,host,port):
pass def f1(self,*args,**kwargs): #动态参数 def info(self):
print('普通方法') per = person()
per.conn('liu','','','')
per.f1('liu','')#因为是动态参数,所以传多少个都可以

info()就是我写的一个很普通的方法,类中还有特性方法、静态方法以及类方法。笔记如下:

特性方法: @property

特性方法:特性方法不能有形式参数,所以调用的时候不需要括号
 class person(object):
@property #表示特性方法
def getuserid(self):
pass
per=person()
per.getuserid #特性方法不需要加括号,不然会报异常per.getuserid(),这个括号不需要哦

静态方法:用 @staticmethod 装饰

静态方法:直接使用类名来进行调用,他属于类。调用的时候不需要实例化.类的静态方法也可以没有参数。
实例化对象后,也可以调用,但是不建议哦 。
 class person(object):
@staticmethod     #表示静态方法
def conn(self):
print('我是静态方法,调用我不需要括号') print(person.conn('liu'))

最后大家看下类方法:用 @classmethod 装饰

类方法:默认有(cls)参数,直接使用类来进行调用,属于类。类的实例化对象也可以调用。
 class person(object):
@classmethod  #表示类方法
def conn(cls):
pass

简单的总结:

类属性:
类属性---》特性方法不能有形式参数,所以调用的时候不需要括号
静态方法----》直接使用类名来进行调用,他属于类。调用的时候不需要实例化.
类方法 ---》直接使用类来进行调用,属于类 属于对象:
实例属性
普通方法
特性方法

Python基础总结之初步认识---class类(中)。第十四天开始(新手可相互督促)的更多相关文章

  1. Python基础总结之初步认识---clsaa类(上)。第十四天开始(新手可相互督促)

    最近的类看着很疼,坚持就是胜利~~~ python中的类,什么是类?类是由属性和方法组成的.类中可能有很多属性,以及方法. 我们这样定义一个类: 前面是class关键字 后面school是一个类的名字 ...

  2. Python基础总结之初步认识---class类的继承(终)。第十六天开始(新手可相互督促)

    最近生病了,python更新要结束了,但是这才是真正的开始.因为后面要更新的是UnitTest单元测试框架,以及后续的Requests库.在后续的笔记会补充一些python的其他细节笔记.我想是这样的 ...

  3. Python基础总结之初步认识---class类的继承(下)。第十五天开始(新手可相互督促

    年薪百万的步伐慢了两天hhhh严格意义是三天.最近买了新的玩具,在家玩玩玩!~~~~ 今天开始正式认识类的继承.类的继承是怎么继承呢?看下代码: class Animal(object): #父类 d ...

  4. Python基础总结之第九天开始【python之OS模块对目录的操作、以及操作文件】(新手可相互督促)

    年薪20万的梦想...         python对文件.目录能做什么?或者说我们需要python替我们做什么?最经常的操作就是对文件的:打开.关闭.读取.写入.修改.保存等等对目录的操作,无非就是 ...

  5. python基础-9.1 面向对象进阶 super 类对象成员 类属性 私有属性 查找源码类对象步骤 类特殊成员 isinstance issubclass 异常处理

    上一篇文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象 ...

  6. python基础之面向对象编程介绍、类和对象

    面向对象变成介绍 面向过程编程 核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西.主要应用在一旦完成很少修改的地方,如linux ...

  7. python基础练习题(题目 作用域、类的方法与变量)

    day29 --------------------------------------------------------------- 实例043:作用域.类的方法与变量 题目 模仿静态变量(st ...

  8. 『无为则无心』Python面向对象 — 52、私有成员方法(类中行为的封装)

    Python对于类的成员没有严格的访问控制限制,这与其他面向对象的编程语言是有所区别的. 关于私有方法其实和私有属性差不多,有如下要点: 1.通常我们约定,两个下划线开头的方法是私有方法. 2.类内部 ...

  9. 《Python基础教程(第二版)》学习笔记 -> 第四章 字典

    字典是Python中唯一内建的映射类型. 字典中的值并没有特殊的顺序,但是都存储在一个特定的键(Key)里.键可以是数字.字符串甚至是元组. 字典的使用 某些情况下,字典比列表更加适用: 表征游戏棋盘 ...

随机推荐

  1. min_25筛学习笔记【待填坑】

    看见ntf和pb两位大佬都来学了,然后就不自觉的来学了. 我们考虑这样一个问题. $$ans=\sum_{i=1}^nf(i)$$其中$1\leq n\leq 10^{10}$ 其中$f(i)$是一个 ...

  2. 7月清北学堂培训 Day 3

    今天是丁明朔老师的讲授~ 数据结构 绪论 下面是天天见的: 栈,队列: 堆: 并查集: 树状数组: 线段树: 平衡树: 下面是不常见的: 主席树: 树链剖分: 树套树: 下面是清北学堂课程表里的: S ...

  3. codeforces722E

    CF722E Research Rover Unfortunately, the formal description of the task turned out to be too long, s ...

  4. pojo、po、dto、dao、bo区别

    j2ee中,经常提到几种对象(object),理解他们的含义有助于我们更好的理解面向对象的设计思维.     POJO(plain old java object):普通的java对象,有别于特殊的j ...

  5. Linux监控工具介绍系列——iostat

    文章转自:https://www.cnblogs.com/ghj1976/p/5691857.html Linux系统中的 iostat是I/O statistics(输入/输出统计)的缩写,iost ...

  6. include指令与jsp:include动作标识的区别

    include指令: 文件包含指令include是jsp的另一条指令标识.通过该指令可以在一个jsp页面中包含另一个jsp页面.不过该指令是静态包含,也就是说被包含文件中所有内容会被原样包含到jsp页 ...

  7. Dubbo系列(三)dubbo的核心技术--RPC调用

    dubbo的核心技术--RPC调用:分为俩部分RPC协议Protocol和方法调用Invoke: 一.RPC协议Protocol(Remote Procedure Call)远程过程调用协议 1.我们 ...

  8. php-fpm(绕过open_basedir,结合ssrf)

    环境的安装->https://www.cnblogs.com/zaqzzz/p/11870489.html 1.nginx的畸形访问 因为安装的是php7.0,所以需要手动修改一下(版本低的时候 ...

  9. Linux设备驱动程序 之 中断

    中断 中断使得硬件可以发出通知给处理器,本质上是一种特殊的电信号,由硬件设备发向处理器,处理器接收到中断后,会马上向操作系统反应此信号的到来,然后就由操作系统负责处理这些新来的数据:硬件设备生成中断并 ...

  10. 《你不知道的JavaScript(上)》笔记——关于this

    this 指向函数的作用域是一种常见的误解,this 在任何情况下都不指向函数的词法作用域. 在 JavaScript 内部, 作用域确实和对象类似, 可见的标识符都是它的属性. 但是作用域" ...