类和对象

这篇博客深入探讨了Python中的类和对象概念,包括面向对象编程的基础,如对象的特征,类的创建,构造函数,实例方法,属性,继承与派生,以及覆盖、封装和多态等高级主题。同时讲解了类方法、静态方法和运算符重载等实用技巧。
摘要由CSDN通过智能技术生成

【类和对象】

1.什么是对象(object):
对象是指现实中的物体或实体
2.什么是面向对象:
把一切看成对象(实例),让对象和对象之间建立关联关系
3.对象都有什么特征:
对象有很多的属性(名词)
对象有很多的行为(动作或动词)
对象 = 属性 + 方法
一个对象的特征称为“属性”、一个对象的行为称为“方法”
# 特征的描述称为属性,在代码层面来看其实就是变量
# 方法实际就是函数,通过调用这些函数来完成某些工作
例如:
	乌龟
	从静态特征描述:绿色的、有四条腿、10kg重、有外壳、大嘴巴...
	从动态的行为描述:会爬、会跑、咬人、吃东西、睡觉....
4.什么是类:class
拥有相同属性和行为的对象分为一组,即为一个类
类是用来描述对象的工具,用类可以创建同类对象
5.类的创建:
语法:
	class 类名(继承列表):
		‘’‘类的文档字符串’‘’
		实例方法定义(类内的函数称为方法method)
		类变量定义
		类方法定义
		静态方法定义
作用:
	创建一个类
	用于描述此类对象的行为和属性
	类用于创建此类的一个或多个对象(实例(Istance))
注意:
	类名后面跟着的小括号,这跟调用函数是一样的
	在python中,类名约定用大写字母开头,函数约定用小写字母开头
	调用对象里的方法,使用点操作符(.)即可
6.类和对象:
    类   |    对象    |    实例对象
(class)|  (object)|  (Instance Objects)
7.构造函数:
表达式:
	类名([创建传参列表])
作用:
	创建这个类的实例对象,并返回此实例对象的引用关系
8.实例对象说明:
	实例有自己的作用域和名字空间,可以为该实例添加实例变量(属性)
	实例可以调用类方法和实例方法
	实例可以访问类变量和实例变量
9.实例方法
语法:
	class 类名(继承列表):
		def 实例方法名(self,参数1,参数2,...):
			'''实例方法的文档字符串'''
			语句块
作用:
	用于描述一个对象的行为,让此类型的全部对象都拥有相同的行为
说明:
	实例方法实质是函数,是定义在类内的函数
	实例方法至少有一个形参,第一个形参代表调用这个方法的实例,一般命名为‘self’
实例方法的调用语法:
	实例.实例方法名(调用传参)
	或
	类名.实例方法名(实例,调用传参)	
10.属性(attribute)也叫实例变量
每个实例都可以有自己的变量,此变量称为实例变量(也叫属性)
属性的使用语法:
	实例.属性名
赋值规则:
	首次为属性赋值则创建此属性
	再次为属性赋值则必变属性的绑定关系
作用:
	用来记录对象自身的数据
11.删除属性:
用del语句可以删除一个对象的实例变量
语法:
	del 对象.实例变量名
示例:
	>>> class Cat:
		pass
	>>> c1 = Cat()
	>>> c1.color = '白色'
	>>> print(c1.color)
	白色
	>>> del c1.color
	>>> print(c1.color)
	Traceback (most recent call last):
	  File "<pyshell#7>", line 1, in <module>
	    print(c1.color)
	AttributeError: 'Cat' object has no attribute 'color'
-------------------------------------------------------------------
12.初始化方法__init__:
作用:
	对新创建的对象添加实例变量(属性)或相应的资源
语法格式:
	class 类名(继承列表):
		def __init__(self [,形参列表]):
			语句块
说明:
	1.初始化方法名必须为__init__不可改变
	2.初始化方法会在构造函数创建实例后自动调用,且实例自身通过第一个参数self传入__init__方法
	3.构造函数的实参将通过__init__方法的形参列表传入__init__方法中
	4.初始化方法内部如果需要返回则只能返回None
示例:
	# 此示例示意__init__方法的调用和添加实例变量
	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,'公里/小时的速度行驶!')
	    def set_color(self,clr):
	    # 此方法用来修改车的颜色
	    self.color = clr

	a4 = Car('红色','奥迪','A4')
	a4.run(120)
	a4.set_color('黑色')
	a4.run(180)

	# a4.__init__('白色','Tesla','Model S') # 显示调用 
	终端打印:
	红色 的 奥迪 A4 正在以 120 公里/小时的速度行驶!
	黑色 的 奥迪 A4 正在以 180 公里/小时的速度行驶!
	--------------------------------------------------------------
13.析构方法__del__(self):
语法:
	class 类名(继承列表):
		def __del__(self):
			语句块
说明:
	析构方法在对象销毁时被自动调用
作用:
	清理此对象所占用的资源
建议:
	python不建议在析构方法内做任何事情,因为对象销毁的时间难以确定
示例:
	# 此示例示意__del__方法的用法

	class Car:
	    def __init__(self,name):
		self.name = name
		print('汽车',name,'对象以创建')
	    def __del__(self):
		print(self.name,'对象已销毁')

	c1 = Car('BYD E6')
	# del c1
	c1 = Car('BMW X5')
	while 1:  # 死循环,为了阻止程序退出
	    pass
	汽车 BYD E6 对象以创建
	汽车 BMW X5 对象以创建
	BYD E6 对象已销毁
	--------------------------------------------
14.预置实例属性:
__dict__属性:
	此属性绑定一个存储此实例自身实例变量(属性)的字典
	键表示的是属性名,值表示的是属性相应的数据值

__class__属性:
	此属性用来绑定创建此实例的类
	作用:
		可以借助此属性来访问创建此实例的类
	示例:
		class Dog:
			pass
		dog1 = Dog()
		dog2 = Dog()
		dog3 = dog1.__class__()  # 创建dog1的同类对象
		>>> class Dog:
			pass

		>>> dog1 = Dog()
		>>> dog1.__class__
		<class '__main__.Dog'>
		>>> dog1.__class__ is Dog
		True
		>>> L = [1,2,3,4]
		>>> L.__class__
		<class 'list'>
		>>> dog2 = dog1.__class__() # 等同于dog1=Dog()
		>>> dog2.__class__
		<class '__main__.Dog'>
		-------------------------------------------------------
15.面向对象的综合示例:
有两个人:张三、35岁/李四、8岁。行为:教别人学东西(teach)、赚钱、借钱。
事情:张三教李四学python、李四教张三学跳皮筋、张三上班赚了1000元钱、李四向张三借了200元。
代码如下:
	# 此示例示意如何用面向对象的方式创建对象
	# 并建立对象与对象之间的逻辑关系
	class Human:
	    '''人类,用于描述人的行为和属性'''
	    def __init__(self,n,a):
		self.name = n  # 姓名
		self.age = a   # 年龄
		self.money = 0 # 钱数为0
	    def teach(self,other,skill):
		print(self.name,'教',other.name,'学',skill)
	    def works(self,money):
		self.money += money
		print(self.name,'工作赚了',money,'元')
	    def borrow(self,other,money):
		if other.money > money:
		    print(other.name,'借给',self.name,money,'元')
		    other.money -= money
		    self.money += money
		else:
		    print(other.name,'没钱借给',self.name)
	    def show_info(self):
		print(self.age,'岁的',self.name,
		    '存有',self.money,'元钱')

	# 以下是类的使用
	zhang3 = Human('张三',35)
	li4 = Human('李四',8)
	zhang3.teach(li4,'python')
	li4.teach(zhang3,'跳皮筋')
	zhang3.works(1000)
	li4.borrow(zhang3,200)
	zhang3.show_info()
	li4.show_info()
	--------------------
	张三 教 李四 学 python
	李四 教 张三 学 跳皮筋
	张三 工作赚了 1000 元
	张三 借给 李四 200 元
	35 岁的 张三 存有 800 元钱
	8 岁的 李四 存有 200 元钱
	--------------------------------------------
16.用于类的函数:
0.查看python内键类的继承关系的函数:
	help(__builtins__)
1.【isinstance(obj,class_or_tuple)返回这个对象obj是否某个类class或某些类的实例对象
				如果是则返回True,否则返回False】
type(obj) 返回对象的类型
以下是小甲鱼书本:
isinstance(obj,classinfo)
如果第一个参数(object)是第二个参数(classinfo)的实例对象,则返回True,否则返回False:
	(1)如果object是classinfo的子类的一个实例,也符合条件
	(2)如果第一个参数不是对象,则永远返回False
	(3)classinfo可以是类对象组成的元组,只要object是其中一个候选对象的实例,则返回True
	(4)如果第二个参数不是类或者由类组成的元组,会抛出一个TypeError异常
示例:

	>>> class A:
		pass
	>>> class B(A):
		pass
	>>> class C:
		pass
	>>> b1 = B()
	>>> isinstance(b1,B)
	True
	>>> isinstance(b1,C)
	False
	>>> isinstance(b1,A)
	True
	>>> isinstance(b1,(A,B,C))
	True
----------------------------------------------------------------------------
2.issubclass(cls,class_or_tuple)
  判断一个类是否继承自其他的类,如果此类cls是class或tuple中的一个派生子类则返回True,否则返回False
  小甲鱼教程:
  issbuclass(class,classinfo)
  如果第一个参数(class)是第二个参数(classinfo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值