Python中类和对象的属性 方法
1、类的格式
类:所有类名要求首字母大写,多个单词使用驼峰式命名,所有类都默认继承Object
class 类名[(父类)]:属性:特征方法:动作
注: python与其他语言不一样,可以动态的加载对象的属性和方法。
2、类属性 & 对象属性
类属性
#定义类和属性 class Student:# 类属性name = 'Jason'age = 20object1 = Student() #使用类,创建对象 object1.age = 21 #对象属性 print(object1.name) print(Student.name)
对象属性
class Phone:def __init__(self,brand,price,date): #初始的,初始化,类似构造函数'''动态的给self空间中添加了两个属性:brand,price'''self.brand = brandself.price = priceself.date = date object1 = Phone('huawei','4999','2019/9') print(object1.brand)
类属性与对象属性的区别:
类属性可以直接通过类名访问。__init__方法中的self属性是对象所特有的,此时访问的是实例化对象的属性。对象属性是先找__init__中的,没找到才到类属性中找。
3、普通方法 & 类方法 & 静态方法
普通方法
格式: def 方法名(self[,参数1,参数2]):pass#以下call就为普通方法 class Phone:brand = 'xiaomi'price = 2399type = '米8'#魔术方法之一:称作魔术方法 __名字__()def __init__(self,brand,price,date): #初始的,初始化,类似构造函数'''动态的给self空间中添加了两个属性:brand,price'''self.brand = brandself.price = pricedef call(self): #self类似于java中的thisprint('正在打电话...',self.note)
类方法
特点:
1、定义需要依赖装饰器classmethod
2、类方法中参数不是一个对象,而是类。
print(cls) # <class ‘_main_.Dog’>
3、类方法中只可以使用类属性
4、类方法中可否使用普通方法? 不能
类方法作用: 因为只能访问类属性和类方法,所以可以在对象创建之前,完成一些动作(功能)。class Dog:__age = 18 # __age类属性的私有,只能在类中访问!!!def __init__(self,nickname):self.nickname = nickname#这个方法必须依赖对象才能存在的def run(self):print('{}在院子里跑来跑去!'.format(self.nickname))def eat(self):print('吃饭。。。')self.run() #类中方法的调用,需要通过self.方法名()#类方法,只要有类存在方法就存在@classmethod #底层封装好的,不用深究。def test(cls): #cls classprint(cls) #<class '__main__.Dog'># print(cls.nickname)d = Dog('大黄') Dog.test() #直接上类
静态方法
特点: 使用类似于类方法
1.需要装饰器@staticmethod
2.静态方法是无需传递参数<cls,self>
3.也只能访问类的属性和方法,对象的是无法访问的
4.加载时机同类方法class Dog:__age = 18 # __age类属性的私有,只能在类中访问!!!def __init__(self,nickname):self.nickname = nickname#这个方法必须依赖对象才能存在的def run(self):print('{}在院子里跑来跑去!'.format(self.nickname))def eat(self):print('吃饭。。。')self.run() #类中方法的调用,需要通过self.方法名()#类方法,只要有类存在方法就存在@classmethod #底层封装好的,不用深究。def test(cls): #cls classprint(cls) #<class '__main__.Dog'># print(cls.nickname)@staticmethoddef test1():print('--静态方法--')print(Dog.__age) d = Dog('大黄') Dog.test1() #调用静态方法也直接上类
总结
类方法 与 静态方法
不同:
1.装饰器不同
2.类方法是有参数的,静态方法没有参数
相同:
1.只能访问类的属性和方法,对象的是无法访问的
2.都可以通过类名使用访问
3.都可以在创建对象之前使用,因为是不依赖对象普通方法 与 两者区别
1.没有装饰器
2.普通方法永远是要依赖对象,因为每个普通方法都有一个self
3.只有创建了对象才可以调用普通方法,否则无法使用。
4、魔术方法(自动执行的方法)
可以参考:Python中的魔术方法详解
__init__:初始化对象,类似构造函数
触发时机:初始化对象时触发(不是实例化触发,但是和实例化在一个操作中)__new__: 实例化的魔术方法
触发时机:在实例化时触发__call__:对象调用方法
#触发时机:将对象当成函数使用的时候,会默认调用此函数中内存__del__:解除对地址引用,类似析构函数
触发时机:del 标识符,解除对地址的引用,或者程序执行完(回收所有在本次执行过程中使用到的空间)。__str__: 提供对象信息
触发时机:打印对象名 自动触发去调用__str__里面的内容
注意: 一定要在__str__方法中添加return,return后面内容就是打印对象看到内容
class Person:def __init__(self,name): #对象把地址给__init__print('__init__')self.name = namedef __new__(cls, *args, **kwargs): #先执行这个,申请内存,先开辟空间print('__new__')return object.__new__(cls) #抛出地址,给对象#__call__:把对象当成函数来调用,必须重写__call__方法def __call__(self,name):print('------>call',name)def __del__(self): #一般不写哦,知道就行啦#删除地址引用的时候就会触发print('--------del----------')def __str__(self):return self.name
总结
__init__ 构造方法,创建空间之后调用的第一个方法。
__str__ 作用:返回人工添加对象信息。
了解:
__new__ 作用: 开辟空间。
__del__ 作用: 没有指针引用的时候会调用,99%都不需要重写 类似析构函数。
__call__ 作用: 想不想将对象当成函数用。补充
怎么获取一个地址被引用了多少次?import sys #首先导入sys模块 print(sys.getrefcount('地址'))
5、实例
实例1:
class Phone:brand = 'xiaomi'price = 2399type = '米8'#魔术方法之一:称作魔术方法 __名字__()def __init__(self,brand,price,date): #初始的,初始化,类似构造函数'''动态的给self空间中添加了两个属性:brand,price'''self.brand = brandself.price = pricedef call(self): #self类似于java中的thisprint('正在打电话...',self.note)object1 = Phone('voio','2999','2019')
- 找有没有一块空间是Phone
- 利用Phone类,向内存申请一块Phone一样的空间
- 去Phone中找有没有__init__,如果没有则执行,将开辟内存给对象名object1
- 如果有__init__,则会进入init方法执行里面动作。再将内存地址赋值给对象object1
实例2:
class Cat:type = '猫'def __init__(self,nickname,age,color):#以下都是对象属性self.nickname = nicknameself.age = ageself.color = color# 动作,方法def eat(self,food):print('{}喜欢吃{}'.format(self.nickname,food))def catch_mouse(self,color,weight):print('{},抓了一只{}kg的,{}的大老鼠!'.format(self.nickname,weight,color))def sleep(self,hour):if hour <5:print('乖乖,继续睡叭!')else:print('赶快起床出去抓老鼠!')#创建对象,对内存来说就是开辟一块空间
cat1 = Cat('花花',2,'灰色')
cat1.eat('fish')
6、大总结
方法:普通方法 ----》 重点def 方法名(self,[参数]):方法体对象.方法()方法之间的调用:class A :def a(self):passdef b(self):#调用a方法self.a()类方法:@classmethoddef 方法名(cls,[参数]):pass类名.方法名()对象.方法名()静态方法:@staticmethoddef 方法名(cls,[参数]):pass类名.方法名()对象.方法名()魔术方法:自动执行方法
Python中类和对象的属性 方法相关推荐
- 混淆概念详细解析:Python中类、对象、方法、函数和属性的区别和理解
混淆概念详细解析:Python中类.对象.方法.函数和属性的区别和理解 前言 一.类.对象.方法.函数和属性的区别和理解 二.一个类的简单案例和对各种概念的理解 三.总结 欢迎学习交流! 邮箱: z- ...
- python与正则表达式(part8)--compile对象及match对象的属性方法
文章目录 compile对象属性(compile函数生成的正则表达式对象的属性) flags参数扩展 举个例子 match对象的属性方法 1.属性变量 2.属性方法 举个例子 compile对象属性( ...
- 学习笔记之——Python中类和对象的理解
学习笔记之--Python中类和对象的理解 面向对象的含义和特性 类 Python中类的定义.结构.创建 Python类的定义 Python类的结构 类的创建 类的属性 类的方法 对象 对象的创建 参 ...
- python静态方法,类方法,属性方法,实例方法
DAY 3. 静态方法,类方法,属性方法,实例方法 有四种方法,实例方法,类方法,静态方法,属性方法 实例方法 实例方法的第一个参数是self,他会指向类的实例化对象,只能被对象调用,如 class ...
- python 修改模板对象的属性_django小技巧之html模板中调用对象属性或对象的方法...
环境:依赖最初test2数据库 python3版本 多python版本环境 进入,python3虚拟环境,新建项目test4: ]# cd py3/django-test1/ ]# django-ad ...
- Python 中类的继承:属性初始化、类型判断、多态、多继承和对象信息的获取
属性初始化: 一定要用super(Teacher, self).__init__(name, gender)去初始化父类,否则,继承自 Person 的 Teacher 将没有 name 和 gend ...
- Python 动态获取对象的属性和方法(内含inspect)
首先通过一个例子来看一下本文中可能用到的对象和相关概念. #coding:utf-8 import sysdef foo():passclass Cat(object):def __init__(se ...
- python 中类与对象
python中类.属性.方法用现实中的一个例子来解释,例如汽车类,方法:能跑,属性:白色的.加长的.python中的属性就是在python中定义的成员变量,方法就是在python中定义的函数. pyt ...
- python中类和对象的内容_python中的类和对象
摘要:本文主要介绍了python中的类和对象的基础内容.由于在c++中对类和对象已经有了较为深刻的认识,所以此部分就是主要熟悉一下创建方法和使用方法. 1.类.对象的创建和简单使用 主要观察创建类的方 ...
- Python中类、对象与self详解
先介绍一下python中的类与对象/实例.然后详细说明self.说明:对象等同实例,本文称呼不一致时请自行统一 [一]类与对象/实例 1.类 (1)类由名称.属性.方法三部分组成 (2)类是抽象模板, ...
最新文章
- 改善代码设计 —— 总结篇(Summary)
- 在Python中,如何确定对象是否可迭代?
- sql字符串分隔函数
- 配置MGR启动第一个节点时start group_replication一直报ERROR 3092 (HY000):The server is not configured properly
- 贝叶斯原理及其推断简介
- 用matlab的ADC和DAC过程,谈谈我理解的ADC和DAC
- 错误:cc1: error: unrecognized command line option “-m32”
- 自定义MVC框架之工具类-图像处理类
- 简约的网络字节序处理
- could not load hsdis-mips64el:hsdis-mips64el library not loadable PrintAssembly is disabled
- 本科生毕业论文查重率多少合适?
- android分区调整大小写,小米2 32G开发版 无损分区调整
- 零点起算法44求最小值C语言,【算法链表面试题】面试问题:C语言实现“关… - 看准网...
- SLAM之回环检测与优化
- [医疗信息化][DICOM教程]HL7 V3 Standard-概述-HL7 V3 Standard - A High Level Overview
- Avaya PBX sip trunk对接第三方sip server传递UUI的方法
- 花了5000元改了一个带触摸板的小红点键盘
- vsCode在window电脑中安装FiraCode字体(好看字体)
- 74161功能表_计数器74ls161工作原理(分频电路、真值表、逻辑功能)
- 2018.8.21 广州科目三展茂东满分飘技巧