面向对象设计—类和对象(一)(包含构造函数,析构函数,实例属性和类属性,方法的动态性)(超详细的学习笔记)

类和对象:

一、定义和使用类:

(1)类定义

定义:

Python的类的方法和普通的函数有一个很明显的区别,在类的方法必须要有一个额外参数self,但在调用这个方法的时候不必为这个参数赋值,系统会自动的把对象的的地址传递给self。

Python使用class关键字来定义类,class关键字之后是一个空格,然后是类的名字,再然后是一个冒号。

class 类名:
      属性(成员变量)
      属性
      成员函数(成员方法)

代码演示如下:

class Person:
    num=1
    def SayHello(self):
        print("Good!")

注意:类的成员函数必须有一个参数self且必须位于参数列表的开头。self就代表类的实例(对象)自身,可以使用self引用类的属性和成员函数。

(2)对象定义

定义:

对象是类的实例,只有定义了具体的对象,并通过“对象名.成员”的方式才能访问其中的数据成员或成员方法。语法如下:
对象名=类名()

代码演示如下:

class Person:
    num=1
    def SayHello(self):
        print("Good!")
a=Person()
a.SayHello()

结果:

Good!

二、构造函数:

(1)__ init__()方法的要点:

1)名称必须固定,即要以两个下划线“_”开头和结束。

2)第一个参数固定,必须为:self。self指的就是刚刚创建好的实例对象。

3)一个类定义了__init__()方法以后,类实例化时就会自动为新生的类实例调用__init__()方法。

4)构造函数一般用于完成对象数据成员设置初值或进行其他必要的初始化工作,如果用户未涉及构造函数,Python将提供一个默认的构造函数。

(2)代码演示如下:

class Student:
    def __init__(self,name,age):
        self.n=name
        self.a=age
x=Student("小明",20)
print(x.n)
print(x.a)

结果:

小明
20

三、析构函数:

Python中类的析构函数是__del__,用来释放对象占用的资源。

代码演示:

class Student:
    def __init__(self,name,age):
        self.n=name
        self.a=age
    def __del__(self):
        print("不存在了")
x=Student("小明",20)
print(x.n)
print(x.a)
print(x)
del x

结果:

小明
20
<__main__.Student object at 0x03348C10>
不存在了

注意:在删除x对象变量之前,x是存在的,在内存中的标识为0x03348C10,执行del x语句后,x对象变量不存在了,系统自动调用析构函数,所以出现“不存在了”。

四、实例属性和类属性:

(1)实例属性

1、实例属性一般在__init__()方法中通过如下代码定义:
self.实例属性名=初始值
2、在本类的其他实例方法中,也是通过self进行访问:
self.实例属性名。

(2)类属性

1、类属性是从属于“类对象”的属性,也成为“类变量”,由于,类属性从属于类对象,可以被所有实例对象共享。
2、类属性的定义方式:

 clas 类名:
      类变量名=初始值

(3)代码演示

class Student:
    num=1                           #类属性
    def __init__(self,name,age):    #构造函数
        self.n=name                 #实例属性
        self.a=age
    def print(self):             #成员函数
        print("姓名:{}\n年龄:{}".format(self.n,self.a))
    def printnum(self):             #成员函数
        print(Student.num)          #由于是类属性,所以不写self.num
x=Student("小明",20)
x.print()
Student.num=2                       #修改类属性
x.printnum()

结果:

姓名:小明
年龄:20
2

五、方法的动态性

在Python中比较特殊的是,可以动态地为类和对象增加成员。

(1)代码:

class Student:
    def work(self):
        print("工作挣钱")
def play(s): #注意与work区别,class里没有这个函数,此时无法用通过s.play()调用
    print("{}爱玩游戏".format(s))
Student.play=play#增加了此语句便可以通过s.play()调用了
s=Student()
s.work()
s.play()

结果:

工作挣钱
<__main__.Student object at 0x032B8C10>爱玩游戏

(2)补充:

1、“实例对象”指的是已经实例化的对象变量,
在这里插入图片描述所以,”爱玩游戏“前面那个地址是Student的(也就是s)
面向对象设计—类和对象(二)(超详细的学习笔记)

补充:

我总结我所有python笔记于一篇博客里:
点击即可进入Python学习笔记大总结(我把我所有python笔记做了总结和学习顺序,点击即可进入相关博客。希望可以便于你们阅读)


版权声明:本文为overcomemyself原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。