Python学习(十一) Python 类

 

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