Python 类
面向对象编程是有效的软件编写方法之一。
python程序编写方法
- 1、函数编程,使用函数方式
- 2、面向对象编程,使用类方式
创建类
创建方法
构造方法,__init__(self,arg)
obj = 类('a1')
普通方法
obj = 类(‘xxx’)
obj.普通方法名()
格式如下:
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')
# 关闭数据链接
#封装数据库登陆IP,端口,用户名,密码
s1 = DataBaseHelper('1.1.1.1',3306, 'jorbabe', '6666')
面向对象三大特性
面向对象三大特性之一:封装
使用构造方法封装相同属性:
def __init__(self, n,a):
self.name = n
self.age = a
self.xue = 'o'
b1 = Bar('jorbabe', 18)
b2 = Bar('yunlei', 19)
面向对象三大特性之二:继承
1、继承
class 父类:
pass
class 子类(父类):
pass
2、重写方法 防止执行父类中的方法
3、self永远是执行改方法的调用者
4、
super(子类, self).父类中的方法(...)
父类名.父类中的方法(self,...)
5、Python中支持多继承
- a. 左侧优先
- b. 一条道走到黑
- c. 同一个根时,根最后执
面向对象三大特性之三:多态
python====> 原生多态,忽略多态,python传参不用指定参数的类型。
v = 'jorbabe'
def func(arg):
print(arg)
func(1)
func('jorbabe')
类成员
class Foo:
#静态字段,属于类
country = '中国'
def __init__(self, name,):
# 普通字段
self.name = name
# 普通方法
def show(self):
print(self.name)
obj = Foo('jorbabe')
obj.name
obj.show()
类成员: 字段
- 普通字段,保存在对象中,执行只能通过对象访问
- 静态字段,保存在类中, 执行 可以通过对象访问 也可以通过类访问
方法
- 普通方法,保存在类中,由对象来调用,self=》对象
普通方法
class Foo:
def bar(self):
print ('bar')
#推荐
obj = Foo()
obj.bar()
Foo.bar(obj)
- 静态方法,保存在类中,由类直接调用
#类方法
class Foo:
def bar(self):
print ('bar')
#静态方法
@staticmethod
def sta():
print ('sta')
#静态方法+传参
@staticmethod
def stac(a1,a2):
print (a1,a2)
Foo.sta()
Foo.stac(1,2)
sta
1 2
- 类方法,保存在类中,由类直接调用,cls=》当前类
#类方法
class Foo:
def bar(self):
print ('bar')
#静态方法
@staticmethod
def sta():
print ('sta')
#静态方法+传参
@staticmethod
def stac(a1,a2):
print (a1,a2)
#类方法
@classmethod
def classmd(cls):
#cls:类名
print (cls)
print ('classmd')
Foo.classmd()
<class '__main__.Foo'>
classmd
应用场景:
- 如果对象中需要保存一些值,执行某功能时,需要使用对象中的值 -> 普通方法
- 不需要任何对象中的值,静态方法
属性
class Foo:
def __init__(self):
self.name = 'a'
def bar(self):
print ('bar')
#属性或特性
@property
def per(self):
print ('per')
obj = Foo()
# obj.per()
obj.per
- 调用方式一一对应
class Foo:
def __init__(self):
self.name = 'a'
def bar(self):
print ('bar')
#属性或特性。调用方式:obj.per
@property
def per(self):
# print ('per')
return 1
#属性传参。调用方式:obj.per = 123
@per.setter
def per(self,val):
print (val)
#属性参数删除。调用方式:del obj.per
@per.deleter
def per(self):
print ('666666')
obj = Foo()
# obj.per()
obj.per
r = obj.per
print (r)
obj.per = 123
del obj.per
1
123
666666
中国的所有省份,用面向对象知识表示?
class Province:
# 静态字段,属于类
country = '中国'
def __init__(self, name):
# 普通字段,属于对象
self.name = name
henan = Province('河南')
henan.name
henan.name = "河南南"
#hebei = Province('河北')
# Province.country
print (Province.country)
print (henan.name)
中国
河南南
实例:利用属性功能实现分页
class Pargination:
#定义页码
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 = Pargination(p)
#类方法未添加属性前的调用方式
# print (li[obj.start():obj.end()])
#方法添加属性后的调用方式,去括号
print (li[obj.start:obj.end])
请输入要查看的页码:5
[40, 41, 42, 43, 44, 45, 46, 47, 48, 49]
请输入要查看的页码:6
[50, 51, 52, 53, 54, 55, 56, 57, 58, 59]
请输入要查看的页码:aa
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
请输入要查看的页码: