zoukankan      html  css  js  c++  java
  • Python面向对象(类,字段和方法)

    Python:函数式+面向对象
    函数式可以做所有的事,是否合适

    定义:
    函数:def+函数名(参数)

    面向对象:class
    def (函数在class里面叫方法,类里面写方法,第一个参数必须是self)

    执行
    函数:函数名(参数)
    面向对象:先创建中间人(对象,实例),然后通过中间人去访问方法

    定义类并执行类中的方法:
    class 类名:
    def 方法名(self,arg):
    print(arg)

    中间人=类名()
    中间人.方法名()

    class var:
    def foo(self,arg):
    print(arg)
    return 4
    boo=var()
    ret=boo.foo(111)
    print(ret)

    self代指调用方法的对象,类和对象的关联为类对象指针

    构造方法:
    特殊作用:
    在obj=类名()
    创建对象
    通过对象执行类中的一个特殊方法
    类名()自动执行构造方法
    =====================================================================

    1、如何创建类
    class 类名:
    pass

    2、创建方法
    构造方法,__init__(self,arg)
    obj = 类('a1')
    普通方法
    obj = 类(‘xxx’)
    obj.普通方法名()

    3、面向对象三大特性之一:封装

    class Bar:
    def __init__(self, n,a):
    self.name = n
    self.age = a
    self.xue = 'o'

    b1 = Bar('alex', 123)

    b2 = Bar('eric', 456)

    4、适用场景:
    如果多个函数中有一些相同参数时,转换成面向对象

    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, 'alex', 'sb')

    5、面向对象三大特性之二:继承

    1、继承

    class 父类:
    pass

    class 子类(父类):
    pass

    2、重写
    防止执行父类中的方法

    3、self永远是执行该方法的调用者

    4、
    super(子类, self).父类中的方法(...)
    父类名.父类中的方法(self,...)

    5、Python中支持多继承

    a. 左侧优先
    b. 一条道走到黑
    c. 同一个根时,根最后执行

    6、面向对象三大特性之三:多态
    ====> 原生多态

    # Java
    string v = 'alex'

    def func(string arg):
    print(arg)

    func('alex')
    func(123)

    # Python
    v = 'alex'

    def func(arg):
    print(arg)


    func(1)
    func('alex')

    ==================================================================
    练习:
    class Person:
    def __init__(self,n,a,g,f):

    self.name = n
    self.age =a
    self.gender =g
    self.fight = f


    role_list = []

    y_n = input('是否创建角色?')
    if y_n == 'y':
    name = input('请输入名称:')
    age = input('请输入名称:')
    ...
    role_list.append(Person(....))

    # role_list,1,2
    ========================== 面向对象中高级=================================

    class Foo:

    def __init__(self, name):
    # 普通字段
    self.name = name

    # 普通方法
    def show(self):
    print(self.name)

    obj = Foo('alex')
    obj.name
    obj.show()


    类成员:
    # 字段
    - 普通字段,保存在对象中,执行只能通过对象访问
    - 静态字段,保存在类中, 执行 可以通过对象访问 也可以通过类访问

    # 方法
    - 普通方法,保存在类中,由对象来调用,self=》对象
    - 静态方法,保存在类中,由类直接调用
    - 类方法,保存在类中,由类直接调用,cls=》当前类

    # 应用场景:
    如果对象中需要保存一些值,执行某功能时,需要使用对象中的值 -> 普通方法
    不需要任何对象中的值,静态方法


    # 属性(特性)
    - 不伦不类


    中国的所有省份,用面向对象知识表示?

    class Province:
    # 静态字段,属于类
    country = '中国'

    def __init__(self, name):
    # 普通字段,属于对象
    self.name = name

    henan = Province('河南')
    henan.name
    henan.name = "河南南"

    #hebei = Province('河北')

    # Province.country

    ======================================================================================================================

    #__author__:"lili"
    #date:2018/3/19 (面向对象)
    class var:
    def foo(self,arg):
    print(arg)
    return 4
    boo=var()
    ret=boo.foo(111)
    print(ret)


    class bar:
    def foo(self,name,age,gender,content):
    print(self,name,age,gender,content)
    obj=bar()
    obj.foo('小明','23','男','开车去东北')
    #============================================
    class bar:
    def foo(self,arg):
    print(self,self.name,arg)
    obj=bar()
    obj.name='bh'
    obj.foo(56)

    class bar:
    def foo(self,name,age,gender,content):
    print(self,self.name,self.age,self.gender,content)
    def foo(self, name, age, gender, content):
    print(self, self.name, self.age, self.gender, content)
    def foo(self, name, age, gender, content):
    print(self, self.name, self.age, self.gender, content)
    obj=bar()
    # obj.foo('小明','23','男','开车去东北')
    # obj.foo('小明','23','男','听音乐')
    obj.name='小明'
    obj.age=12
    obj.gender='男'

    # obj.add('上山去砍柴')
    # obj.delete('开车去东北')
    # obj.update('开车去东北')


    # 构造方法:__init__
    # 特殊作用:
    # 在obj=类名()
    # 创建对象
    # 通过对象执行类中的一个特殊方法

    class bar:
    def __init__(self,name,age):
    # print('sb')
    self.n=name
    self.a=age
    def foo(self):
    print('jg')

    obj=bar('alex',12)
    print(obj.n,obj.a)

    class person:
    def __init__(self,name,age):
    self.n=name
    self.a=age
    def show(self):
    print('%s--%s'%(self.n,self.a))

    p1=person('alex',11)
    p2=person('alice',22)
    p1.show()
    p2.show()

    class bar:
    def __init__(self,name,age,gender):
    self.n=name
    self.a=age
    self.g=gender
    def add(self,content):
    print(self,self.n,self.a,self.g,content)
    def delete(self, content):
    print(self, self.n, self.a, self.g, content)
    def update(self,content):
    print(self, self.n, self.a, self.g, content)
    def get(self, content):
    print(self, self.n, self.a, self.g, content)
    obj=bar('小明',11,'男')

    obj.add('上山去砍柴')
    obj.delete('开车去东北')
    obj.update('最爱胡萝卜')

    class person:
    def __init__(self,name,age):
    self.n=name
    self.a=age
    #默认值直接写在这里
    self.x='o'
    def show(self):
    print(self,self.n,self.a,self.x)
    p1=person('xiao',11)
    p1.show()
    #==========================继承===================================
    class grandFather():
    def heshui(self):
    pass
    class Father(grandFather): #父类(基类)
    def lanqiu(self):
    pass
    def zuqiu(self):
    pass
    def xiyan(self):
    pass
    def hejiu(self):
    pass
    def tangtou(self):
    pass

    class Son(Father): #子类(派生类)
    def baojian(self):
    pass
    s=Son()
    s.baojian()
    s.hejiu()
    s.heshui()
    # 在子类中定义和父类一样的方法名就执行子类的方法
    class F:
    def f1(self):
    print('F.f1')
    def f2(self):
    print('F.f2')
    class S(F):
    def s1(self):
    print('S.s1')
    def f1(self):
    # 执行父类的方法有两种方式
    super(S,self).f1()
    F.f1(self)
    print('S.f1')

    obj=S()
    obj.s1() #s1中的self是形参,此时代指obj
    obj.f1() #self永远指调用方法的调用者
    #python 中支持一个子类继承多个父类,按照从左到右的顺序依次寻找直到找到
    #如果两个父类有共同的父类则先找左侧的父类,先不找共同的父类,而是找右边的父类,最后找共同的父类
    #================================================================
    #练习 ,用的最多的是继承
    class Person:
    def __init__(self,n,a,g,f):
    self.name=n
    self.age=a
    self.gender=g
    self.fight=f
    role_list=[]
    y_n=input('是否创建角色?')
    if y_n=='y':
    name=input('请输入名称:')
    age=input('请输入名称:')

    #面向对象中高级
    class Foo:
    def __init__(self,namee):
    #普通字段
    self.name=name
    #普通方法
    def show(self):
    print(self.name)
    obj=Foo('alex')
    obj.name
    obj.show()
    #类成员:包括普通字段(保存在对象中),普通方法(保存在类中),执行的时候字段不加括号,方法加括号
    #静态字段保存在类中,执行时可以通过对象访问,也可以通过类访问

    #中国的所有省份,用面向对象知识表示?
    #创建一个省份的类
    class Province:
    #静态字段
    country='中国'
    def __init__(self,name):
    self.name=name
    #有多少省就会有多少个中国,如果保存在类中,每个省用指针指向该值
    #类中的字段叫做静态字段,静态字段保存在类中,普通字段保存在对象中,只能通过对象访问
    #self.country='中国'
    # henan=Province('河南')
    # hebei=Province('河北')
    print(Province.country)

    #__author__:"lili"
    #date:2018/3/24
    class Province:
    #静态字段
    country='中国'

    def __init__(self,name):
    self.name=name
    # henan=Province('河南')
    # hebei=Province('河北')
    print(Province.country)

    #方法有三种,方法的调用要么通过创建对象执行方法,或直接通过类执行方法,首先需创建对象
    #普通方法保存在类中,由对象调用
    #静态方法,保存在类中,由类直接调用
    #类方法,是静态方法的变种,通过类可以直接调用

    class Foo:
    def bar(self): #self是对象
    print('bar')
    @staticmethod #加上装饰器,就是静态方法,静态方法self不是必须的
    def sta():
    print('123')
    @staticmethod
    def stat(a1,a2):
    print(a1,a2)
    @classmethod #类方法至少有一个参数
    def classmd(cls): #cls是类名,不依赖于对象
    print(cls)
    print('classmd')

    Foo.sta()
    Foo.stat(1,2)
    Foo.classmd()
    print('====================================================================')
    class Foo:
    def bar(self):
    print('bar')
    #通过类对象指针找到方法
    obj=Foo()
    obj.bar()
    #通过类直接找到方法,但是里面需传参数
    obj=Foo()
    Foo.bar(obj)

    class Foo:
    def __init__(self):
    self.name='a'
    #obj.name
    #obj.bar()
    def bar(self):
    #self是对象
    print('bar')
    @property #属性(定义时像方法,访问时像字段)
    # 用于执行obj.per,用于获取值
    def per(self):
    # print('123')
    return 1
    @per.setter #设置字段,给字段赋值,用于执行obj.per=123
    def per(self,val):
    print(val)
    @per.deleter #删除某个字段时在前面加上关键字del
    def per(self):
    print(555)
    obj=Foo()
    r=obj.per #@property
    print(r)
    obj.per=456 #@per.setter
    del obj.per #@per.deleter
    #按照自己调用的方式不同,执行不同的对应的方法
    print('========================================')

    # li=[]
    # for i in range(1000):
    # li.append(i)
    # while True:
    # p=input("请输入要查看的页码:")
    # p=int(p)
    # start=(p-1)*10
    # end=p*10
    # print(li[start:end])
    print('==========================================')
    #封装成函数,用属性之后在调用时不用加括号。
    # class pagenation:
    # 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=pagenation(p)
    # print(li[obj.start:obj.end])

    class foo:
    def f1(self):
    return 123
    def f2(self,v):
    print(v)
    def f3(self):
    print('del')
    per=property(fget=f1,fset=f2,fdel=f3,doc='tuvctc7tcc')
    #和下面的功能一样
    # @property
    # def per(self):
    # return 123
    obj=foo()
    ret=obj.per
    print(ret)
    obj.per=8989
    del obj.per
  • 相关阅读:
    SQL创建索引
    SQLServer最耗资源时间的SQL语句
    C# Linq删除父级的同时删除子级
    C# 根据类名创建类的实例对象
    C#利用反射实现两个类的对象之间相同属性的值的复制
    linq时间筛选以及list时间筛选
    为什么watch机制不是银弹?
    我们的前端模版引擎更新总结
    小矮人Javascript模块加载器
    Javascript模版引擎简介
  • 原文地址:https://www.cnblogs.com/cxli99/p/8640918.html
Copyright © 2011-2022 走看看