python学习日记12(类和对象)
类和对象
类和对象是面向对象编程的两个核心概念。
类
类是一种抽象概念,是对一系列具有相同特征或行为的事物的统称。不可直接使用。
- 类中的特征具象化就是一个变量,称为类的属性
- 类中的行为具象化就是一个函数,称为类的方法
- 类本质就由一些列属性和方法构成的抽象概念
对象
对象是由类创建出来的具体实例,可直接进行使用。
对象由那个类创建,就拥有那个类中定义的属性和方法。
类和对象的关系
- 类是模板,对象根据类这个模板进行创建,所以先有类再有对象;
- 根据一个类可以创建多个对象;
- 类中定义的属性和方法,根据该类创建出来的对象就会拥有这些属性和方法;
- 不同对象的属性值会有所不同
面向对象基本语法
在python中,对象几乎是无处不在,可使用
dir
内置函数来查看对象拥有的方法。
定义简单的类
class 类名:
def 方法1(self,参数列表):
pass
def 方法2(self,参数列表):
pass
根据类创建实例化对象
当一个类定义完成之后,要使用这个类来创建对象,语法格式如下:
对象变量名 = 类名()
类中的 self
self
self的概念
当对象调用方法,方法中的
self.属性名
可以访问到这个对象的属性;通过
self.方法名()
可以调用这个对象的方法。
可以理解为:
self
代表类的实例,而非类。
class Test:
def ppr(self):
print(self)
print(self.__class__)
t = Test()
t.ppr()
执行结果:
<__main__.Test object at 0x0000021A1E47DC88>
<class '__main__.Test'>
在日常开发中,不推荐在类的外部直接给对象添加属性这种方式。对象应该具有哪些属性,我们应该封装在类的内部。
self
可以省略吗?
self
在Python解释器的内部,当我们调用t.ppr()时,实际上Python解释成Test.ppr(t),也就是把self替换成了类的实例。
class Test:
def ppr():
print(self)
t = Test()
t.ppr()
执行结果:
Traceback (most recent call last):
File "cl.py", line 6, in <module>
t.ppr()
TypeError: ppr() takes 0 positional arguments but 1 was given
运行时提醒错误如下:ppr在定义时没有参数,但是我们运行时强行传了一个参数。
由于上面解释过了t.ppr()等同于Test.ppr(t),所以程序提醒我们多传了一个参数t。
这里实际上已经部分说明了
self
在定义时不可以省略。