概念
属性:
人类包含很多特征,把这些特征用程序来描述的话,叫做属性,属性是名词,比如年龄、身高、性别、姓名等都叫做属性,一个类中可以有多个属性
方法:
人类还能做好多事情,把这些功能用程序来描述的话,叫做方法,方法路是动词,比如说话、走路、吃饭等,一个类中可以有多个方法
对象:
一个对象即是一个类的实例化后实例,一个类必须经过实例化后方可在程序中调用,一个类可以实例化多个对象,每个对象亦可以有不同的属性,就像人类是指所有人,每个人是指具体的对象,人与人之前有共性,亦有不同
实例化:
把一个类转变为一个对象的过程就叫实例化
面向对象3大特性
Encapsulation 封装
在类中对数据的赋值、内部调用对外部用户是透明的,这使类变成了一个胶囊或容器,里面包含着类的数据和方法
Inheritance 继承
一个类可以派生出子类,在这个父类里定义的属性、方法自动被子类继承
Polymorphism 多态
多态是面向对象的重要特性,简单点说:“一个接口,多种实现”,指一个基类中派生出了不同的子类,且每个子类在继承了同样的方法名的同时又对父类的方法做了不同的实现,这就是同一种事物表现出的多种形态。
多态是抽象化的一种体现,把一系列具体事物的共同点抽象出来, 再通过这个抽象的事物, 与不同的具体事物进行对话。对不同类的对象发出相同的消息将会有不同的行为。
一切皆为对象
python中一切皆为对象,且python3中类与类型是一个概念,类型就是类
类型dict就是类dict
经典类与新式类
1.只有在python2中才分新式类和经典类,python3中统一都是新式类
2.在python2中,没有显式的继承object类的类,以及该类的子类,都是经典类
3.在python2中,显式地声明继承object的类,以及该类的子类,都是新式类
4.在python3中,无论是否继承object,都默认继承object,即python3中所有类均为新式类
一个简单的小案例
class Qiaoning(object):
def ell(self):
name = input('请输入你的用户名:')
passwd = input('请输入你的用户密码: ')
if name == 'qiaoning' and passwd == '123':
print('系统登录成功')
else:
print('系统登录失败')
obj = Qiaoning()
obj.ell()
class Qiaoning:
def login(self):
users = str(input('请输入你的用户名:'))
password = int(input('请输入你的密码:'))
if users == 'qiao' and password == 123:
print('用户 %s 密码 %s 登录成功'%(users,password))
else:
print('用户 %s 密码 %s 登录失败' % (users, password))
obj = Qiaoning()
obj.login()
函数版用例
def email(el,txt):
print(el,txt)
def msg(ms,txt):
print(ms,txt)
def wechat(we,txt):
print(we,txt)
if 1==1:
email('qiaoning@qq.com','买票')
msg('1888888888','买票')
wechat('xxxxxxx','买票')
'''
qiaoning@qq.com 买票
1888888888 买票
xxxxxxx 买票
'''
面向对象用例
class Messages:
def email(self,el, txt):
print(el, txt)
def msg(self,ms, txt):
print(ms, txt)
def wechat(self,we, txt):
print(we, txt)
obj = Messages()
obj.email('qiaoning@qq.com', '买票')
obj.msg('1888888888', '买票')
obj.wechat('xxxxxxx', '买票')
'''
qiaoning@qq.com 买票
1888888888 买票
xxxxxxx 买票
'''
class A:
company_name = '老男孩教育' # 静态变量(静态字段)
__iphone = '1353333xxxx' # 私有静态变量(私有静态字段)
def __init__(self,name,age): #特殊方法
self.name = name #对象属性(普通字段)
self.__age = age # 私有对象属性(私有普通字段)
def func1(self): # 普通方法
pass
def __func(self): #私有方法
print(666)
@classmethod # 类方法
def class_func(cls):
""" 定义类方法,至少有一个cls参数 """
print('类方法')
@staticmethod #静态方法
def static_func():
""" 定义静态方法 ,无默认参数"""
print('静态方法')
@property # 属性
def prop(self):
pass
总结
对比:
函数: 定义简单/调用简单
面向对象: 定义复杂/调用复杂, 好处:归类 将类似的功能放到一起
总结:
1.函数式编程可能比面向对象式更好
2.python支持两个编程方式
面向对象语法格式
class 类名: 定义一个类
def 函数名(self): 在类中定义了一个方法
pass
obj = 类名() 创建了一个对象/实例化了一个对象
obj.函数名() 通过对象调用其中一个方法