天天看点

学习日记12(类和对象)python学习日记12(类和对象)

python学习日记12(类和对象)

类和对象

类和对象是面向对象编程的两个核心概念。

​ 类是一种抽象概念,是对一系列具有相同特征或行为的事物的统称。不可直接使用。

  • 类中的特征具象化就是一个变量,称为类的属性
  • 类中的行为具象化就是一个函数,称为类的方法
  • 类本质就由一些列属性和方法构成的抽象概念

对象

​ 对象是由类创建出来的具体实例,可直接进行使用。

​ 对象由那个类创建,就拥有那个类中定义的属性和方法。

类和对象的关系

  • 类是模板,对象根据类这个模板进行创建,所以先有类再有对象;
  • 根据一个类可以创建多个对象;
  • 类中定义的属性和方法,根据该类创建出来的对象就会拥有这些属性和方法;
  • 不同对象的属性值会有所不同

面向对象基本语法

​ 在python中,对象几乎是无处不在,可使用

dir

内置函数来查看对象拥有的方法。

定义简单的类

class 类名:
    def 方法1(self,参数列表):
        pass
    def 方法2(self,参数列表):
        pass
           

根据类创建实例化对象

当一个类定义完成之后,要使用这个类来创建对象,语法格式如下:

对象变量名 = 类名()

类中的

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

可以省略吗?

​ 在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

在定义时不可以省略。