1.面向对象编程 Object-Oriented Programming

什么是对象: 对象是指现实中的物体或者实体
什么是面向对象: 把一切都看成对象(实例),用各种对象之间的关系来描述事物
对象的特征:

1)对象有很多属性(名词或形容词)
    年龄、姓名、性别、漂亮
2)对象有很多行为(动词、动作)
    学习、吃饭、睡觉、踢球、鼓掌……

2.什么是类

拥有相同属性和行为的对象分为一组,即为一个类
类是用来描述对象的工具,用类可以创建此类的对象(实例)

3.类和对象示意

车(类) --- 对象:BYD BMW
狗(类) ---	对象:哈士奇  阿拉斯加
int(类)---	对象:100 200

4.类的创建语句

4.1 语法:

class 类名(继承列表):
    '''类文档字符串'''
    实例方法定义
    类变量定义
    类方法定义(@classmethod)
    静态方法定义(@staticmethod)

4.2 作用:

·创建一个类
·类用于描述对象的行为和属性
·类用于创建此类的一个或多个对象(实例)

4.3 说明:
类名必须为标识符(与变量名命名相同,建议首字母大写)
类名实质上就是变量,他绑定一个类

5.构造函数

5.1 构造函数的调用表达式:

类名([创建传参列表])

5.2 作用:
创建这个类的实例对象,并返回此实例对象的引用关系

5.3 说明:

实例有自己的作用域和名字空间,可以为该实例添加实例变量(也叫属性)
实例可以调用类方法和实例方法
实例可以访问类变量和实例变量

5.4 示例

class Dog():
    '''创建一个Dog类,此类用于描述一种小动物的属性和行为'''
    pass
dog1 = Dog()    # 创建Dog类的一个实例
print(id(dog1)) # 打印 对象dog1的地址
dog2 = Dog()
print(id(dog2))
lst1 = list()   #创建空列表
print(id(lst1))
lst2 = list()
print(id(lst2))

输出如下

140627558661032
140627558661088
140627558662792
140627558662856

6.实例方法

6.1 语法:

class 类名(继承列表):
    def 实例方法名(self,形参名1,形参名2,……)	# self(自己),如同C++中的‘this’
	'方法文档字符串'
	语句块

6.2 作用:
用于描述一个东西的行为,让此类型的全部对象都拥有相同的行为

6.3 说明:
实例方法的实质是函数,是定义在类内的函数
实例方法至少有一个形参,第一个形参用来绑定调用这个方法的实例,一般命名为self

6.4 实例方法的调用语句:

实例.实例方法名(调用传参)		 L.append(6)	# 常用
或					 # 功能相同
类名.实例方法名(实例,调用传参)		 list.append(L,6)

6.5 示例

# 此示例示意实例方法的定义和调用
class Dog():
    '''创建一个Dog类,此类用于描述一种小动物的属性和行为'''
    def eat(self,food):
        print(id(self),'号',end='')
        print("小狗正在吃",food)
    def sleep(self,hour):
        print(id(self),'号',end='')
        print("小狗睡了%d小时"%hour)
    def play(self,obj):
        print(id(self),'号',end='')
        print("小狗正在玩",obj)
dog1 = Dog()        # 创建一个狗对象
dog1.eat('骨头')
dog1.sleep(1)
dog1.play("足球")
print('-'*35)
dog2 = Dog()        # 创建一个狗对象
dog2.eat('狗粮')
dog2.sleep(3)
dog2.play("飞盘")

输出如下:

140479668505680 号小狗正在吃 骨头
140479668505680 号小狗睡了1小时
140479668505680 号小狗正在玩 足球
-----------------------------------
140479668505736 号小狗正在吃 狗粮
140479668505736 号小狗睡了3小时
140479668505736 号小狗正在玩 飞盘

7.实例属性 attribute(也叫实例变量)

每个实例可以有自己的变量用来保存对象自己的数据,成为实例变量(也叫属性)

7.1 语法:

实例.属性名

7.2 赋值负责同变量的赋值规则:

1)首次为属性赋值则创建此属性
2)再次为属性赋值则改变属性的绑定关系

7.3 作用:
记录每个对象自身的数据

7.4 示例

# 此示例示意为对象添加实例本来(实例属性)几访问实例变量(实例属性)
# 全局变量一共三个: Dog(),dog1,dog2
# 实例对象是依附于对象的
class Dog():
    def eat(self,food):
        print(self.color,"的",self.kinds,'正在吃',food)
        self.last_food = food       # 记录吃过食物
    def show_last_food(self):
        print(self.color,'的',self.kinds,"上次吃的是",self.last_food)
dog1 = Dog()
dog1.kinds = '京巴'   # 添加实例属性
dog1.color = '白色'   # 添加
dog1.color = '黄色'   # 修改实例属性的而绑定关系
dog2 = Dog()         #另一个对象
dog2.kinds = '藏獒'   
dog2.color = '棕色'   
print(dog1.color,'的',dog1.kinds)
print(dog2.color,'的',dog2.kinds)
dog1.eat('suggur')
dog2.eat('meat')
dog1.show_last_food()
dog2.show_last_food()

输出如下

黄色 的 京巴
棕色 的 藏獒
黄色 的 京巴 正在吃 suggur
棕色 的 藏獒 正在吃 meat
黄色 的 京巴 上次吃的是 suggur
棕色 的 藏獒 上次吃的是 meat

示例2:

class Human():
    def set_info(self,name,age,address = '不详'):
        self.name = name
        self.age = age
        self.address = address
    def show_info(self):
        print(self.name+'的年龄是:',self.age,',地址是:',self.address)
h1 = Human()
h1.set_info('小张',20,'北京市东城区')
h2 = Human()
h2.set_info('小李',18)
h1.show_info()
h2.show_info()

输出如下

小张的年龄是: 20 ,地址是: 北京市东城区
小李的年龄是: 18 ,地址是: 不详

8.del语句

可以删除对象object(实例instance)的属性

8.1 语法:
del 对象.实例变量名

8.2示例:

class Dog:
    pass
dog1 = Dog()          # 创建一个实例
dog1.color = '白色'   # 添加属性
print(dog1.color)     # 白色
del dog1.color        # 删除属性
# print(dog1.color)   # AttributeError 错误 错误

9.初始化方法

9.1 作用:对新创建的对象添加属性

9.2 语法格式:

class 类名(继承列表):
    def __init__(self,[形参列表]):
	语句块
注:[] 代表其中的内容可以省略

9.3 说明:

1)初始化方法名 必须为__init__ 不可改变
2)初始化方法会在构造函数创建实例后自动调用,且将实例自身通过第一个参数self传入__init__方法
3)构造函数的实参将通过__init__方法的参数列表传入到__init__方法中
4)初始化方法内如果需要return语句返回,则只能返回None

9.4 示例

# 此示例示意初始化方法的定义,及用初始化方法对新建的对象添加属性
class Car:
    '''小汽车类'''
    def __init__(self,c,b,m):
        self.color = c
        self.brand = b
        self.model = m
    def run(self,speed):
        print(self.color,'的',self.brand,self.model,'正在以',speed,'公里每小时行驶')
a4 = Car('白色','宝马',120)
a4.run(99)

输出入下
白色 的 宝马 120 正在以 99 公里每小时行驶

10.析构方法

10.1 语法:

class 类名(继承列表):
def __del__(self):
    语句块

注:
析构方法在对象被销毁时自动调用
python语言建议不要在对象销毁时做任何事情,因为销毁时间难以确定

# 此示例示意析构方法的使用
class Car():
    def __init__(self,info):
        self.info = info
        print("汽车对象",info,"被创建")
    def __del__(self):
        print("汽车对象",self.info,"被销毁")
c1 = Car('BYD E6')
del c1
L = []
L.append(Car("汽车1"))
L.append(Car("汽车2"))
L.append(Car("汽车3"))
del L
input("输入回车执行程序")
print("程序退出")

输出如下

汽车对象 BYD E6 被创建
汽车对象 BYD E6 被销毁
汽车对象 汽车1 被创建
汽车对象 汽车2 被创建
汽车对象 汽车3 被创建
汽车对象 汽车3 被销毁
汽车对象 汽车2 被销毁
汽车对象 汽车1 被销毁
输入回车执行程序  <enter>
程序退出

11.预置实例属性

__dict__属性:绑定一个存储此实例自身变量字典

示例:

class Dog():
    pass
dog1.color = '白色'
dog1.kind = '京巴'
print(dog1.__dict__)		# {'color': '白色', 'kind': '京巴'}

12.class 属性

'class’属性绑定创建此实例的类

12.1 作用:可以借助此属性来访问创建此实例的类

12.2 示例:

class Dog():
    pass
dog1 = Dog()
print(dog1.__class__)		#<class '__main__.Dog'>
dog2 = dog1.__class__()
print(dog2.__class__) 	    # <class '__main__.Dog'>

13.用于类的函数

13.1 isinstance(obj,class_or_tuple) 返回这个对象obj是否是某个类的对象,或者某些类中的一个类的对象,如果是返回True

isinstance(3.1,float)	# True
isinstance(3.14,(int,Dog,float)	# True

13.2 type(obj) 返回对象的类型

type(3.14)	# float
type(dog1)	# <class'__main__.Dog'>
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐