目录
- 面向对象
- 类和对象
- 实例方法
- 实例属性
- 删除属性及初始化方法
- 析构方法
- 预置实例二属性
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()