面向对象初级
一、如何创建类
class 类名:
pass
二、创建方法
1、普通方法
obj=类()
obj.方法名()
实例:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author by lh
class bar:
def main(self, a):
print(a)
obj = bar()
obj.main(2) #self指调用方法的对象
2、构造方法
obj=类(参数)
实例:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author by lh
class bar:
def __init__(self, name, age): #类名()调用时,自动执行__init__(封装)
self.n = name
self.a = age
def main(self):
print(self.n, self.a)
z = bar('lh', 18) #参数为__init__中的参数
z.main()
三、适用场景
如果多个函数中有一些相同参数时,转换成面向对象
class DataBaseHelper:
def __init__(self, ip, port, username, pwd):
self.ip = ip
self.port = port
self.username = username
self.pwd = pwd
def add(self,content):
# 利用self中封装的用户名、密码等 链接数据
print('content')
# 关闭数据链接
def delete(self,content):
# 利用self中封装的用户名、密码等 链接数据
print('content')
# 关闭数据链接
def update(self,content):
# 利用self中封装的用户名、密码等 链接数据
print('content')
# 关闭数据链接
def get(self,content):
# 利用self中封装的用户名、密码等 链接数据
print('content')
# 关闭数据链接
s1 = DataBaseHelper('1.1.1.1',3306, 'lh', '123')
四、面向对象三大特性
1、封装

2、继承
(1)继承
class F:
def f1(self):
print('f1')
def f2(self):
print('f2')
class S(F):
def f3(self):
print('f3')
obj = S()
obj.f3()
obj.f1()
(2)重写(两种方式)
a、super(派生类名,self).基类中的方法名(参数)
b、基类方法名.基类中的方法名(self,参数)
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author by lh
class F:
def f1(self):
print('F.f1')
def f2(self):
print('F.f2')
class S(F):
def f3(self):
print('S.f3')
def f2(self):
super(S, self).f2()
#重写是为了既想调用基类中的方法,又想调用派生类中的方法(两个方法相同)
# F.f2(self)
print('S.f2')
obj = S()
obj.f2()
(3)self永远是执行该方法的调用者
(4)Python中支持多继承
a、从左侧基类开始
b、左侧基类找完之后再找右边基类
c、如果有左侧的基类和右侧的基类有相同的基类时,相同的基类最后执行
3、多态
Python中原生就是多态的
五、静态字段与静态方法
1、字段
(1)普通字段:保存在对象中,执行只能通过对象访问
(2)静态字段:保存在类中,执行可以通过对象访问也可以通过类访问
(3)实例:
class province:
country = '中国' #静态字段
def __init__(self, name):
self.name = name #普通字段
print(province.country)
obj = province('河北')
print(obj.name)
2、方法
(1)普通方法:保存在类中,由对象来调用,self=》对象
(2)静态方法:保存在类中,由类直接调用
(3)类方法:保存在类中,由类直接调用,cls=》当前类
(4)实例:
class foo:
def bar(self): #普通方法
print('abc')
@staticmethod #静态方法
def sta():
print('123')
@staticmethod #带参数的静态方法
def stat(a1, a2):
print(a1, a2)
@classmethod #类方法
def classmd(cls):
print('classmd')
@classmethod #带参数的类方法
def classmth(cls,a1,a2):
print(a1,a2)
obj = foo()
obj.bar() #直接通过对象调用
foo.sta() #通过类调用
foo.stat(1, 2) #通过类调用
foo.classmd() #通过类调用
foo.classmth(1,2) #通过类调用
3、property:不用括号,直接调用
实例:
class bar:
@property
def foo(self):
print('666')
return 1
obj=bar()
ret=obj.foo # 不用括号,直接调用
print(ret)
实例:
class pagenum:
def __init__(self, current_page):
try: #当输入除了数字之外的字符时,自动跳到第一页
p = int(current_page)
except Exception as e:
p = 1
self.page = p #将输入的页码赋值
@property
def start(self):
val = (self.page - 1) * 10 #每页的开始值
return val
@property
def end(self):
val = self.page * 10 #每页的结束值
return val
li = []
for i in range(1000):
li.append(i)
while True:
p = input('请输入页码:')
obj = pagenum(p) # 执行__init__方法,将输入的页码传入
print(li[obj.start:obj.end]) # 打印
posted on 2016-09-22 10:11 python屌丝的逆袭 阅读(207) 评论(0) 收藏 举报
浙公网安备 33010602011771号