一、面向对象
1、定义
站在上帝的视角,世间万物一切皆是对象,我们把拥有共同的属性分为一类,而这就是closs的由来
2、类与对象
①、定义
所谓类就是类别,类简单的理解就是⼀系列对象相似的特征与技能的结合体。⽐如我们定义⼀个⼈的类,那么⾥⾯的⽅法就是⼈的特征。在程序⾥⾯,需要特别强调的是先定义类,再使⽤类(对类进⾏实例化)。在Python中,定义类的关键字是class,所有类的基类是object。
class Person(object):
def __init__(self,name,age):
self.name=name
self.age=age
②、规则
类的首字母必须是大写的,
类里面编写的方法,其实本质等价于函数式编程里面编写的函数
③、函数式编程与面向对象式编程实例区别
函数式编程
def show():
print('this is a class')
show()
面向对象式编程
class Person(object):
def show(self):
print('this is a class')
obj=Person()
obj.show()
结果是一致的
二、类的调用
class Person(object):
#初始化(针对类的初始化)
def __init__(self,name,age):
# 实例化属性的过程
self.name=name
self.age=age
print('开始执行')
#调用部分
def show(self):
print('my name is {name},and my age is {age}'.format(
name=self.name,age=self.age))
#析构方法(清理作用)
def __del__(self):
print('执行结束')
obj=Person(name='wuya',age=18)
obj.show()
思路:
①、先执行__init__方法
②、执行具体调用的方法
③、最后执行__del__方法
执行结果
三、类的属性
1、组成
数据属性:属于类
实例属性:属于对象
2、案例
class Person(object):
city='xian'
def __init__(self,name,age):
self.name=name
self.age=age
def show(self,sex='boy'):
print('my name is {name},and my age is {age},所在城市:{city},sex is {sex}'.format(name=self.name,age=self.age,city=self.city,sex=sex))
#设置动态参数
def info(self,**kwargs):
return kwargs
obj=Person(name='wuya',age=18)
obj.show()
print(obj.info(name='wuya',age='18',address='xian',work='testDev'))
四、类的方法
1、普通方法
2、特性方法:(只读)
3、案例:
#普通方法
class Person(object):
def show(self):
print('这是一个普通方法')
#特性方法
@property
def info(self):
print('特性方法是只读属性')
#普通方法 方法与方法之间的调用
def login(self,username,password):
if username=='wuya' and password=='admin':
return True
else:
return False
def profile(self,username,password):
if self.login(username=username,password=password):
print('访问个人主页成功')
else:
print('重定向')
obj=Person()
obj.show()
obj.info #info使用的是特性方法,只读属性,不做更改,即没有括号,不赋值
obj.profile(username='wuya',password='admin')
五、封装
封装:通过数据属性以及实例属性来体现的
案例:更改名称
class Person(object):
def __init__(self,name):
self.name=name
def getName(self):
return self.name
def setName(self,name):
if len(name)>2 and len(name)<6:
self.name=name
else:
print('名字长度不符合')
def show(self):
print(self.name)
obj=Person(name='wuya')
print(obj.getName)
obj.setName(name='5676677')
print(obj.getName())
结果
在范围内
不在范围内