python学习笔记:python中的类

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 为什么实例可以访问类中的方法和属性?

  • 属性和方法的查找流程:
    当我们调用一个对象的属性时,解析器会先在当前对象中寻找是否含有该属性。
    若有,则直接返回当前对象的属性值;若没有,则去当前对象的类对象中寻找,如果有则返回类对象的属性;没有则报错
发布了51 篇原创文章 · 获赞 34 · 访问量 919

猜你喜欢

转载自blog.csdn.net/weixin_43412569/article/details/104855374