15python面对对象之类和对象
Posted miki的测试笔记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了15python面对对象之类和对象相关的知识,希望对你有一定的参考价值。
前言:本文主要介绍python面对对象中的类和对象,包括类和对象的概念、类的定义、类属性、实例属性及实例方法等。
一、类和对象的概念
问题:什么是类?什么是实例对象?
类:是一类事物的抽象概念,不是真实存在的,描绘了该类事物共有的特征和行为
-
例如:猫类、狗类、鸟类、车类等
实例对象:某类事物的具体个体,是该类事物的具体表现,它是真实存在的
1)遵循标识符的命名规范,即由字母、数字及下划线组成且不能以数字开头,不能使用关键字。
2)建议使用大驼峰命名法(每个单词的第一个字母大写,
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.name dog_age = wangcai.age print(\'狗的名字:{}\'.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 爬树 狗的名字:jojo Process 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.name dog_age = wangcai.age print(\'狗的名字:{}\'.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.py Traceback (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 defined Process 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.name dog_age = wangcai.age print(\'狗的名字:{}\'.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
以上是关于15python面对对象之类和对象的主要内容,如果未能解决你的问题,请参考以下文章