python学习笔记:python中的类
程序员文章站
2022-06-16 21:22:52
...
1.类(class)的简单介绍
- 内置对象:python中提供的对象。官网:https://docs.python.org/3/library/index.html
- 内置对象并不能满足所有需求,所以在开发中经常需要自定义一些对象。
- 简单理解:对象是一个容器,类是对象的图纸。也称,对象是类的实例(instance)。
- 如果多个对象是通过一个类创建的,我们称这些对象是一类对象
- 常见的类:int()、float()、bool(),str(),dict()等都属于类
- a=int(10) #创建一个int类的实例,等价于 a=10
- 系统内置的类都是小写开头,我们自定义的类都需要大写字母开头,使用大驼峰命名法(帕斯卡命名法)
a=int(10) #创建一个int类的实例
b=str('hello') #创建一个str类的实例
print(a,type(a)) #查看变量的类
print(b,type(b))
10 <class 'int'>
hello <class 'str'>
2.自定义一个类
- 使用class关键字来定义类,语法和函数很像!
- 定义方式为:
class 类名([父类]):
代码块
#class 类名([父类]):
# 代码块
class MyClass():
pass
print(MyClass)
<class '__main__.MyClass'>
3.检查一个对象是否是一个类的实例:isinstance()
mc=MyClass()
result=isinstance(mc,MyClass)
print('result=',result)
result= True
result=isinstance(mc,str)
print('result=',result)
result= False
4.类也是一个对象。类是创建对象的对象—PPT
如何证明类是对象?对象的结构:id,type,value
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N8Nvz1aX-1584151216682)(attachment:image.png)]
print(id(MyClass),type(MyClass))
2566220227480 <class 'type'>
类是type类型的对象。定义类=定义了一个type类型的对象。一切皆对象!!!
5.使用类创建对象的流程
使用类创建对象,就像调用函数一样
- 创建一个变量mc
- 在内存中开辟一个空间–对象有了id,对象的type就是类,value看情况
- 将对象的id赋值给变量
由于MyClass是空的,所以通过MyClass创建的对象都是一个空对象。实际上对象中什么都没有,空盒子。
空盒子有什么用?空盒子可以添加变量。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V76XI7Er-1584151216684)(attachment:image.png)]
class MyClass():
pass
mc=MyClass()
print(id(mc),type(mc))
2227538359520 <class '__main__.MyClass'>
5.1可以向对象中添加变量,对象中的变量称为属性。
语法:对象.属性名=属性值
mc.name="孙悟空"
print(mc.name)
mc.time=20191121
print(mc.time)
孙悟空
20191121
一般情况下,不会创建一个空的类,再想放什么属性就放什么。因为类是图纸,对象是实例。
6.类的定义
- 类和对象都是对现实生活中或程序中内容的抽象。
- 类不能凭空创造,刚才定义的MyClass是为了便于理解定义的空的类。实际上是在生活和程序中都不存在
- 实际上所有的事物都由两部分组成:1.数据(属性) :身高体重等 ;2.行为(方法):走跑跳等
6.1属性:
- 在类的代码块中,我们可以定义变量和函数
- 在类中定义的变量,称为属性
- 在类中定义的变量,成为该类实例的公共属性,该类的所有实例都可以通过“对象.属性名”的形式访问这些属性
#定义一个表示人的类
class Person:
name='孙悟空'#公共属性,所有实例都可以访问
#创建Person的实例
p1=Person()
p2=Person()
print(id(Person),type(Person))
print(id(p1),type(p1),p1.name)
print(id(p2),type(p2),p2.name)
2227517622680 <class 'type'>
2227538486552 <class '__main__.Person'> 孙悟空
2227538486832 <class '__main__.Person'> 孙悟空
6.2 方法:
- 在类中定义的函数,称为方法
- 在类中定义的函数,成为该类实例的公共方法,该类的所有实例都可以通过“对象.方法名()”的形式调用方法
- 调用方法:对象.方法名()
#定义一个表示人的类
class Person:
name='孙悟空'
def say_hello():
print('你好!')
#创建Person的实例
p1=Person()
p2=Person()
#调用say_hello方法
p1.say_hello()
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-28-3dafb7c1b2d4> in <module>
8 p2=Person()
9 #调用say_hello方法
---> 10 p1.say_hello()
TypeError: say_hello() takes 0 positional arguments but 1 was given
6.2.1方法调用与函数调用的区别:
- 函数调用,则调用时传几个参数就会有几个实参
- 方法调用,第一个参数由解析器自动传递,所以定义方法时,至少要定义一个形参!!!!!
修改:给say_hello方法定义一个形参a
#定义一个表示人的类
class Person:
name='孙悟空'
def say_hello(a):
print('你好!')
#创建Person的实例
p1=Person()
p2=Person()
#调用say_hello方法
p1.say_hello()
p2.say_hello()
你好!
你好!
6.3 为什么实例可以访问类中的方法和属性?
- 属性和方法的查找流程:
当我们调用一个对象的属性时,解析器会先在当前对象中寻找是否含有该属性。
若有,则直接返回当前对象的属性值;若没有,则去当前对象的类对象中寻找,如果有则返回类对象的属性;没有则报错