一切皆对象,类也是对象,类来自于元类type,如果一个类没有声明自己的元类,默认它就是元类。

即类是元类的实例,通过type(类)会显示type,而实例来自于类。

类有两个属性,数据属性和函数属性,下面是一个创建类和实例化对象的例子

class animal:'This is class for animal'  #类的说明type='animal'def __init__(self,name,sex,leg):self.name = nameself.sex = sexself.leg = legdef eat(self,food):print('%s likes to eat %s'%(self.name,food))def play(self):print('%s is playing'%self.name)print(animal.__name__)#打印类的名称
print(animal.__doc__) #打印类的说明,__doc__属性不能继承给子类
print(animal.__dict__) #打印类的属性字典

cat=animal('cat','male',4)
print(cat.__dict__) #打印类的属性字典
print(cat.type)
cat.eat('mouse')
cat.play()#执行结果
# animal
# This is class for animal
# {'__module__': '__main__', '__doc__': 'This is class for animal', 'haveTeeth': True, '__init__': <function animal.__init__ at 0x00000000021AA598>, 'eat': <function animal.eat at 0x00000000021AA620>, '__dict__': <attribute '__dict__' of 'animal' objects>, '__weakref__': <attribute '__weakref__' of 'animal' objects>}
# {'name': 'cat', 'sex': 'male', 'leg': 4}
# cat likes to eat mouse
# animal

在class animal:范围下面的都是对animal类的定义,其中def __init__()是定义animal类的数据属性,__init__()不应该有返回值,否则会报错,其他函数则是animal类的函数属性,可以看到类下面的函数的第一个参数都是self。

当执行cat=animal('cat','male',4),触发animal类的__init__()函数生成一个cat实例。

__dict__表示属性字典,以字典形式存放,通过打印animal.__dict__和cat.__dict__可以发现,类有数据属性和函数属性,而实例只有函数属性没有数据属性,但是实例可以继承和调用对象的函数属性。

实例调用类的函数时,会自动将实例本身作为第一个参数传给函数,但是类自己调用函数时不会自动将实例本身作为参数传入,例如要通过类调用play()函数,则animal.play(cat)。

类的属性字典是共用的,而实例的属性字典是私有的。

类属性的查看、增加、修改和删除

#查看类的数据属性
print(animal.type)
#修改类的数据属性
animal.type='Animal'
print(animal.type)
#增加类的数据属性
animal.haveteeth=True
print(cat.haveteeth)
#删除类的数据属性
del animal.haveteeth
#增加类的函数属性,修改类似
def play_bal(self,ball):print('The %s is playing %s'%(self.name,ball))
animal.play_ball=play_bal
cat.play_ball('tennis')

实例属性的增加

#增加实例的数据属性,cat.__dict__['key']='value'也可以增加数据属性但不建议使用
cat.living='land'
print(cat.__dict__)  #{'name': 'cat', 'sex': 'male', 'leg': 4, 'living': 'land'}
#删除实例的数据属性
del cat.living
print(cat.__dict__)  #{'name': 'cat', 'sex': 'male', 'leg': 4}
#修改实例的数据属性
cat.sex='female'
print(cat.sex)  #female
#增加实例的函数属性
def test():print('hello')
cat.test=test
cat.test()  #hello

对于实例增加的函数属性,实例在调用时不会自动将自身作为参数传入。

需要注意的是:

如果在类前面定义了与类的数据属性同名的全局变量,那么只要不通过类或者实例+.调用这个变量,这个变量就是指类前面定义的全局变量

如果实例增加了与类的数据属性同名的属性,相当于给实例增加了这个属性,对实例的属性没有影响。

type='mouse'
class animal:type='animal'l=['a','b']def __init__(self,name):self.name = nameprint(type)  #此处的type是指全局变量,而不是类内部的数据属性变量

cat=animal('cat')
cat.type='male' #相当于给cat增加了一个数据属性type,对类的type属性没有影响
print(cat.__dict__)
print(cat.type)
cat.l.append('c')#此处修改的是类的数据属性l,与通过=赋值(给实例增加属性)不同

__class__:实例来自哪个类

__module__:实例来自哪个模块

转载于:https://www.cnblogs.com/Forever77/p/10083808.html

python的类和实例化对象相关推荐

  1. python类和对象实例_python的类和实例化对象

    原博文 2018-12-07 16:50 − 一切皆对象,类也是对象,类来自于元类type,如果一个类没有声明自己的元类,默认它就是元类. 即类是元类的实例,通过type(类)会显示type,而实例来 ...

  2. Python编程语言学习:python语言中快速查询python自带模块函数的用法及其属性方法、如何查询某个函数关键词的用法、输出一个类或者实例化对象的所有属性和方法名之详细攻略

    Python编程语言学习:python语言中快速查询python自带模块&函数的用法及其属性方法.如何查询某个函数&关键词的用法.输出一个类或者实例化对象的所有属性和方法名之详细攻略 ...

  3. Python的类属性与对象属性的区别

    Python的类属性与对象属性的区别 命名规则: 1.1 类属性由类创建,命名规则为类名.属性名 1.2 对象属性由对象创建,命名规则为对象名.属性名 调用方法: 2.1 类属性由类调用 2.2 对象 ...

  4. python和尚念经:实例化对象、调用方法、最全属性、最全内置函数

    一:先搞懂定义 class Ball: #定义一个类def __init__(self,name): #初始化对象self.name = namedef kick(self): #方法print('我 ...

  5. c#类属性和实例属性_Visual C#类和对象的创建方式,定义类,实例化对象,实例讲解...

    定义类 类由class member类成员组成,包含字段.属性.方法和事件.其中字段和属性为类的数据成员,用来存储数据:方法负责数据的传递和运算.使用类之前,要进行声明,声明的语法如下: Class ...

  6. python创建类的实例化_在C中实例化python类#

    IronPython类不是.NET类.它们是IronPython.Runtime.Types.pythotype的实例,后者是Python元类.这是因为Python类是动态的,并且支持在运行时添加和删 ...

  7. Python面向对象编程中的创建类及其实例化对象等方法.....【超级详细】

  8. Python 的类其实是一个特殊的对象

    Python 中的类是一个特殊的对象. Python 中一切皆对象: class AAA:定义的类属于类对象. obj1 = AAA(): 属于实例对象. 在程序运行时,类同样会被加载到内存,类是一个 ...

  9. python:类与对象

    目录 一.类与实例对象 1.声明类和实例化对象 2.对象的属性和初始化 3.实例方法 4.一切皆对象 5.类对象和类属性 6.静态方法和类方法 二.类的简单继承 1.继承的简单使用 2.重写父类方法和 ...

最新文章

  1. numa节点_漫步云端NUMA调度
  2. php zend 安装,全方位讲解PHP zend安装技巧
  3. 深拷贝与浅拷贝(mutableCopy与Copy)详解 iOS
  4. 数据库:case when then
  5. IDC 2018可穿戴市场报告:耳戴式设备占比四分之一,成“新宠”
  6. python关系图谱_文本分析之制作网络关系图
  7. 第六章 三大消息摘要算法总结
  8. Java EE陷阱#1:忽略@Singleton的默认锁定
  9. ext中ArrayStore,JsonStore,XmlStore的用
  10. sql server分页
  11. Java基于opencv实现图像数字识别(一),java开发面试笔试题
  12. kubernetes视频教程笔记 (13)-容器start、stop、相位
  13. linux看视频播放器官方下载,SMPlayer - Linux 电影播放器
  14. C语言基础入门(经典收藏)
  15. 【ffmpeg】视频解码器
  16. 安卓新手入门基础知识
  17. 臀部无论大小,翘起才是王道。
  18. (学习笔记)OrCAD进行DRC时报错以及解决办法
  19. 计算机网络信息安全特征,计算机基础知识:网络信息安全的概述及特征
  20. 什么是空头陷阱?(全网最全面的分析)?

热门文章

  1. django html文本编辑器,django xadmin 集成DjangoUeditor富文本编辑器
  2. zabbix代理服务器搭建
  3. 使用kali的工具攻击win10_使用“媒体创建工具”制作Win10系统安装U盘
  4. java1.6 linux_linux java1.6 安装
  5. python用代码表示5与2的整除_Python教程5:Python 2.x和Python 3.x的区别有哪些?
  6. 服务器保存excel文件慢,从使用IE的服务器缓慢地保存Excel文件
  7. mysql 8 centos_CentOS8下安装mysql8
  8. 收费最低的云存储_百度云:虚拟主机11元/6个月,入门级云服务器60元/年
  9. ajax中itemtexts,从Jquery Ajax调用CodeMirror textarea的值设置
  10. 笔记-软考高项-错题笔记汇总1