[python全栈]03.面向对象(1)

目录

  1. 面向对象
  2. 类和对象
  3. 实例方法
  4. 实例属性
  5. 删除属性及初始化方法
  6. 析构方法
  7. 预置实例二属性

1. 面向对象

对象 : Object
	对象是指现实中的物体或实体
面向对象 :
	把一切看成对象(实例),让对象和对象之间建立关联关系
对象的特征 :
	1.对象有很多属性(名词)	使用变量去存储属性
			姓名,性别,年龄,身高 ......
	2.对象有很多行为(动词)	使用函数(方法 method)去描述动作
			学习,吃饭,睡觉,踢球 ......
	拥有一系列变量和函数的东西 叫做对象

2. 类和对象

类 : Class
	拥有相同属性和行为的对象分为一组,即为一个类
	类是用来描述对象的工具,用类可以创建同类对象
	车(类) ---------- > BMW  750(京A88888)  实例
			\ ---------- > BYD F6 (京A66666) 实例
	狗(类) ---------- > 小京巴 (户籍号:000001) 实例
			\ ---------- > 导盲犬 (户籍号:000002) 实例
	int(类) ---------- > 100 (对象/实例)
			\ ---------- >  200(对象/实例)
类的创建 :
语法:
	class 类名(继承列表) :
		''' 类的文档字符串 '''
		实例方法定义(类内的函数成为方法 method)
		类变量定义
		类方法定义
		静态方法定义
作用 :
	创建一个类
	用于描述此类对象的行为和属性
	类用于创建此类的一个或多个对象(实例)
 类 和 对象 :
 	 类		|  对象		  实例
  Class		| Object	 instance
 构造函数 :
 	表达式 :
 		类名([创建传参列表])
 	作用 :
 		创建这个类的实例对象,并返回此实例对象的引用关系
 实例(对象)说明 :
 	实例有自己的作用域和名字空间,可以为该实例添加实例变量(属性)
 	实例可以调用类方法和实例方法
 	实例可以访问类变量和实例变量
eg :
	class Dog :	#定义一个类,类名为Dog
		pass
		dog1 = Dog()	#Dog()创建Dog类的对象
	dog2 = Dog()	#类似 str1=str(); dict1=dict() ...

3. 实例方法

实例方法 :
	list1.split() ; list1.join()
	语法 :
		class 类名(继承列表) :
			def 实例方法名(self,参数1,参数2,...) :
				''' 实例方法的文档字符串 '''
				语句块
	作用 :
		用于描述一个对象的行为,让此类的全部对象拥有相同的行为
	说明 :
		实例方法的实质是函数,是定义在类内的函数
		实例方法至少有一个形参,第一个形参代表调用这个方法的实例,一般命名为'self'
	实例方法的调用语法 :
		实例.实例方法名(调用参数)
		或
		类名.实例方法名(实例,调用传参)
eg :
class Dog :
	def eat(self,food) :
		print('小狗正在吃',food)
	def sleep(self,hour) :
		print('小狗睡了',hour,'小时')
	def play(self,what) :
		print('小狗正在玩',what)
dog1 = Dog()
dog1.eat('狗粮')	#实例.实例方法名(调用参数)
Dog.sleep(dog1,1)	#类名.实例方法名(实例,调用传参)
dog1.play('球')
#>>>小狗正在吃狗粮
#>>>小狗睡了1小时
#>>>小狗正在玩球

4. 实例属性

属性 attribute (也叫实例变量)
	每个实例都可以有自己的变量,此变量成为实例变量(也叫属性)
属性的使用语法 :
	实例.属性名
赋值规则 :
	首次为属性赋值则创建此属性
	再次为属性赋值则必变属性的绑定关系
作用 :
	用来记录对象自身的数据
eg :#示意为对象添加属性
class Dog :
	def eat(self,food):
		print(self.color,'的',self.kinds,
				'正在吃',food)
dog1 = Dog()
dog1.kinds = '京巴'	#添加属性kinds
dog1.color = '白色'	#添加属性color
dog1.color = '黄色'	#修改属性color
dog2 = Dog()
dog2.kinds = '牧羊犬'	#添加属性kinds
dog2.color = '灰色'	#添加属性color
实例属性和方法结合使用 :
class Dog :
	def eat(self,food):
		print(self.color,'的',self.kinds,
				'正在吃',food)
dog1 = Dog()
dog1.kinds = '京巴'	#添加属性kinds
dog1.color = '白色'	#添加属性color
dog1.eat('狗粮')
dog2 = Dog()
dog2.kinds = '牧羊犬'	#添加属性kinds
dog2.color = '灰色'	#添加属性color
dog2.eat('狗粮')
#>>>白色 的 京巴 正在吃 狗粮
#>>>灰色 的 牧羊犬 正在吃 狗粮
'''定义一个学生类
定义一个类方法 set_info(self,name,age):
此方法用来给学生对象添加'姓名''年龄属性'
定义一个类方法 show_info(self):
'''此处显示此学生信息'''
'''
class student :
        def set_info(self,name,age=0) :
                self.name = name
                self.age = int(age)
        def show_info(self):
                print('name:',self.name,'age:',self.age)               
s1 = student()
s1.set_info('张三',20)
s1.show_info()
#>>> name: 张三 age: 20

5. 删除属性及初始化方法

删除属性 :
	使用del语句可以删除一个对象的实例变量
	语法 : del 对象.实例变量名
eg:
class cat :
	pass
cat1 = cat()
cat1.color = '白色'
print(cat1.color) #白色
del cat1.color	
print(cat1.color) #属性错误
初始化方法:
	作用:对新创建的对象添加实例变量(属性)或相应的资源
	语法格式:
		class 类名(继承列表):
			def __init__(self[,形参列表]):
				语句块
	说明:
		1.初始化方法名必须为__init__ 不可以改变
		2.初始化方法会在构造函数创建实例后'自动调用'
			且将实例自身通过第一个参数self传入__init__方法
		3.构造函数的实参将通过__init__方法的形参列表传入__init__方法中
		4.初始化方法内部如果需要返回则只能返回None
	eg:#示意 __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,'km/h速度行驶')
a4 = car('red','audi','A4')
a4.__init__('white','Tesla','Model S')
a4.run(140)
'''修改以前的student类,为其添加初始化方法,
		在创建时添加'name','age','score'
添加set_score方法能为对象修改成绩信息
'''
class student:
	def __init__(self,name,age=0,score=0):
		self.name = name
		self.age = int(age)
		self.score = int(score)
		return None
	def set_score(self,sco):
		self.score = int(sco)
	def show_info(self):
		print('name:',self.name,'age:',self.age,
				'score:',self.score)
s1 = student('zhangsan',20,95)
s1.set_score(96)
s1.show_info()

6. 析构方法

析构方法 : 
------------------------------------------------
		python 不建议在析构方法内做任何事情!
		因为对象销毁时间不确定
------------------------------------------------
语法名 :
	class 类名(继承列表):
		def __del__(self):
			语句块
说明 : 析构方法在对象销毁时被'自动调用'
作用 :清理此对象所占用的资源
eg :
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('BYD E6')
c1= car('BMW X5')#绑定新对象,原对象销毁

7. 预置实例二属性

__dict__
__class__
预置实例属性 : dir(实例)

__dict__属性
	此属性绑定一个储存此实例自身实例变量(属性)的字典
eg:
class Dog :
	pass
dog1 = Dog()
print(dog1.__dict__)
#>>>{}
dog1.kinds = '京巴'
print(dog1.__dict__)
dog1.__dict__['age'] = 3
print(dog1.__dict__)
#>>>{'kinds': '京巴', 'age': 3}
#>>>{'kinds': '京巴'}
__class__属性
	此属性绑定创建此实例的类
作用 : 可以借助此属性来访问创建此实例的类
eg :
class Dog :
	pass
dog1 = Dog()
dog2 = Dog()
dog3 = dog1.__class__() #创建dog1的同类对象	
用于类的函数 :
	isinstance(obj,class_or_tuple) 
		返回这个对象obj是否某个类class或某些类的实例
		如果是则返回True,否则返回False
	eg:
	class Dog :
		pass
	class Cat:
		pass
	animal = Dog()
	isinstance(animal,Dog)	#True 
	isinstance(animal,Cat)	#False
	isinstance(animal,(Cat,int,list))	#False 
	isinstance(animal,(Cat,int,Dog))	#True 
面向对象的综合示例

#示意如何用面向对象方式创建对象
#并建立对象与对象之间的逻辑关系

有两个人 :
1.姓名 :  张三
	年龄 : 35
2. 姓名 : 李四
	年龄 : 8
行为 :
	1.教别人东西 teach
	2.赚钱 earn
	3.借钱 borrow
描述 :
	张三 教 李四 学 python
	李四 教 张三 学 跳皮筋
	张三 上班 赚 了1000元钱
	李四 向 张三 借 200元

class human :
        ''' 人类,用于描述人的行为和属性 '''
        def __init__(self,name,age):
                self.name = name
                self.age = int(age)
                self.money = 0

        def teach(self,obj,skill):
                print(self.name,'教',obj.name,
                '学',skill)
        def earn_money(self,m):
                self.money += m
                print(self.name,'上班赚了',m,'元')

        def borrow(self,obj,m):
                if zhang3.money> m :
                        self.money += m
                        obj.money -= m
                        print(self.name,'向',obj.name,'借了',m)
                else:
                        print(self.name,'向',obj.name,'借',m,
                                ',',obj.name,'没这么多钱')
         def show_info(self):
                print('name:',self.name, 'age:',self.age,
                      'money:',self.money)                               
zhang3 = human('张三',35)
li4 = human('李四',8)
zhang3.teach(li4,'python')
li4.teach(zhang3,'跳皮筋')
zhang3.earn_money(1000)
li4.borrow(zhang3,200)
zhang3.show_info()
li4.show_info()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值