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] 请输入要查看的页码:
原文地址:https://www.cnblogs.com/jorbabe/p/8733829.html
时间: 2024-12-10 15:43:10