打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
python基础之面对对象之类和对象
userphoto

2022.08.09 福建

关注

文章末尾给大家留下了大量的福利

一、类和对象的概念

问题:什么是类?什么是实例对象?

类:是一类事物的抽象概念,不是真实存在的,描绘了该类事物共有的特征和行为

  • 例如:猫类、狗类、鸟类、车类等

实例对象:某类事物的具体个体,是该类事物的具体表现,它是真实存在的

  • 例如:“张三”是具体的某个“人“,”二哈“是具体的某个”狗“

二、类的定义

关键字:class

定义类的方法:

方式一:class 类名:

方式二:class 类名(object):

注意:方式一、方式二本质上是一样的,没有任何区别,只是写法不一样,他们都继承object这个基类。这里简单解释一下,在python3以前,不继承object类会少很多可操作对象,这些都是类中的高级特性,但在python3以后所有类都默认继承这个object基类了。

类名的命名规范:

1)遵循标识符的命名规范,即由字母、数字及下划线组成且不能以数字开头,不能使用关键字。

2)建议使用大驼峰命名法(每个单词的第一个字母大写,例如:MyClass、TestCase)

三、类属性和实例属性

1.类属性

什么是类属性?就是一类事物的共同特征,比如狗类,共同特征:叫声(汪汪汪)、四只脚等。

类属性:就是定义在类中的变量

类属性的访问:

类可以直接访问类属性

该类的实例对象也可以访问类属性

class Dog: # 创建一个狗类 cry = '汪汪汪' # 类属性 leg = '四只脚' # 类属性wangcai = Dog() # 创建一个实例对象,旺财是一只具体的狗print('通过类名直接访问类属性:'.format(Dog.cry)) # 通过类名直接访问类属性print('通过实例对象访问类属性:'.format(wangcai.cry)) # 通过实例对象访问类属性

运行结果:

C:\software\python\python.exe D:/learn/python18_http_request/exercise/test.py通过类名直接访问类属性:通过实例对象访问类属性:Process finished with exit code 0

2.实例属性

什么是实例属性?就是实例对象特有的属性,比如旺财是一个实例对象,他的名字叫旺财,这个名字就是一个实例属性

实例属性:实例对象特有的属性,添加实例属性的方式:

实例对象.属性 = 属性值

定义在类里的__init__方法里的变量

实例属性的访问:实例属性只有该实例对象自己能访问

class Dog: # 创建一个狗类 cry = '汪汪汪' # 类属性 leg = '四只脚' # 类属性 def __init__(self, name, age): '''实例对象初始化方法''' self.name = name self.age = age# 创建一个实例对象,因为有初始化方法__init__,定义了两个必需参数,因此实例化对象时需要传两个参数wangcai = Dog(name='旺财', age='4') # wangcai = Dog('旺财', '4') 这种写法也可以,顺序对应参数即可dog_name = wangcai.namedog_age = wangcai.ageprint('狗的名字:{}'.format(dog_name)) # 实例属性只能该实例对象访问print('狗的年龄:{}'.format(dog_age))# 通过 实例对象.属性 = 属性值 再添加一个实例属性wangcai.skill = '爬树'print(wangcai.skill)# print(Dog.name) # 实例属性是不能通过类去访问的,会报错jojo = Dog('jojo', 3) # 实例化对象,一只叫jojo的狗dog_name2 = jojo.name # jojo只能访问自己的属性,不能访问其他实例对象(旺财)的属性print('狗的名字:{}'.format(dog_name2))

运行结果:

C:\software\python\python.exe D:/learn/python18_http_request/exercise/test.py狗的名字:旺财狗的年龄:4爬树狗的名字:jojoProcess finished with exit code 0

在上面例子中使用了一个__init__方法,这些是什么方法呢?被双下划线包起来的方法,是python中有特殊语义的方法,也叫魔术方法,注意自定义方法时不要用这个格式命名。魔术方法不需要手动调用,在指定的条件下会自动触发,而这个__init__方法是在创建实例对象时就会自动触发。

3.关于self的理解

细心的你是不是发现了?在上面的例子,类里的init方法还有一个参数self,self是什么?有什么作用?

self可以理解为自己,即实例对象本身,哪个实例对象去调用,这个self就指向哪个实例对象,python解释器会把这个实例对象作为第一个参数传给self。这样是不是就能解释为什么实例属性只能该实例对象去访问呢。如果觉得有点绕,多理解几遍,多敲几遍吧!

四、实例方法

1.实例方法的定义

  • 实例方法直接定义在类中
  • 实例方法的第一个参数为self(这个参数必须要写)

2.实例方法的访问

  • 通过实例对象直接调用,该类的实例对象都可以访问,访问实例方法时会自动将实例对象本身作为第一个参数传给self接收
  • 通过类调用实例方法时,要传递一个self参数,即传递一个实例对象(很少用这种方法)
class Dog: # 创建一个狗类 cry = '汪汪汪' # 类属性 leg = '四只脚' # 类属性 def __init__(self, name, age): '''实例对象初始化方法''' self.name = name self.age = age def skill(self): sk1 = '爬树' # 这里定义的只是一个方法里的变量,其他方法是无法调用的 print('技能1:{}'.format(sk1)) def skill2(self, sk2): self.sk2 = sk2 # 接收参数sk2,这里为什么要用self.去接收?因为这样相当于定义了一个实例属性,self就是指向实例对象 print('技能2:{}'.format(self.sk2)) def skill3(self): print('技能3:{}'.format(self.sk2)) # 这里访问self.sk2就能访问 print('技能4:{}'.format(sk1)) # 这里访问sk1会报错,找不到wangcai = Dog(name='旺财', age='4') # wangcai = Dog('旺财', '4') 这种写法也可以,顺序对应参数即可dog_name = wangcai.namedog_age = wangcai.ageprint('狗的名字:{}'.format(dog_name)) # 实例属性只能该实例对象访问print('狗的年龄:{}'.format(dog_age))wangcai.skill() # 通过实例对象直接调用实例方法wangcai.skill2('抓老鼠') # 调用实例方法,该实例方法定义了一个必须参数wangcai.skill3()

运行结果:

C:\software\python\python.exe D:/learn/python18_http_request/exercise/test.pyTraceback (most recent call last):狗的名字:旺财  File 'D:/learn/python18_http_request/exercise/test.py', line 31, in <module>狗的年龄:4技能1:爬树技能2:抓老鼠技能3:抓老鼠    wangcai.skill3()  File 'D:/learn/python18_http_request/exercise/test.py', line 20, in skill3    print('技能4:{}'.format(sk1))     # 这里访问sk1会报错,找不到NameError: name 'sk1' is not definedProcess finished with exit code 1

下面演示一个通过类访问实例方法(了解即可):

class Dog: # 创建一个狗类 cry = '汪汪汪' # 类属性 leg = '四只脚' # 类属性 def __init__(self, name, age): '''实例对象初始化方法''' self.name = name self.age = age def skill(self): sk1 = '爬树' # 这里定义的只是一个方法里的变量,其他方法是无法调用的 print('技能1:{}'.format(sk1)) def skill2(self, sk2): self.sk2 = sk2 # 接收参数sk2,这里为什么要用self.去接收?因为这样相当于定义了一个实例属性 print('技能2:{}'.format(self.sk2))wangcai = Dog(name='旺财', age='4') # wangcai = Dog('旺财', '4') 这种写法也可以,顺序对应参数即可dog_name = wangcai.namedog_age = wangcai.ageprint('狗的名字:{}'.format(dog_name)) # 实例属性只能该实例对象访问print('狗的年龄:{}'.format(dog_age))# 通过类调用实例方法:要传递一个self参数,即传递一个实例对象Dog.skill(wangcai) # 传递一个实例对象Dog.skill2(wangcai, '抓老鼠') # 传递完实例对象再传方法里的必需参数

运行结果:

C:\software\python\python.exe D:/learn/python18_http_request/exercise/test.py狗的名字:旺财狗的年龄:4技能1:爬树技能2:抓老鼠Process finished with exit code 0

总结

今天的文章就到这里了哟,需要获得下面福利的小伙伴可以私信我关键字“资料”获取哟。

项目实战

app项目,银行项目,医药项目,电商,金融

大型电商项目

全套软件测试自动化测试教学视频

300G教程资料下载【视频教程+PPT+项目源码】

全套软件测试自动化测试大厂面经

python自动化测试++全套模板+性能测试

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python数据类型再讲解!夯实基础再构筑上层建筑,满满的干货
Python 高级教程之类
如何掌握python的类,详细阅读本文!
python面向对象编程——类与继承 初认识
Python自学知识点整理--类
十七、Python __slots__:限制类实例动态添加属性和方法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服