zoukankan      html  css  js  c++  java
  • 面向对象能做什么和特性及嵌套

    面向对象帮我们解决什么问题?

      面向对象的风封装的这个特性帮助我们解决了两个问题
    
        1.归类: 将方法和静态变量放置到一个类中
        2.打包: 将数据打包到一个对象

    面向对象的三大特性

    封装,继承,多态
    
      1.封装: 帮我们解决一些方法和属性进行分类,让代码更加的清晰,提高可读性提高
    
      2.继承: 提高代码的复用性,将具有相同的属性和方法提取出来
    
      3,多态: python原生支持多态,崇尚鸭子模型,由于python函数传参时,无需指定参数类型

    对于对象(self)的跟踪: 

    self参数是这实例化的过程中帮助我们自动传递的.所以在继承中是,对于结果的输出时.要看self是谁的对象空间,这会才能确定输出的结果是谁

    在python中支持多继承,这会对抽象类和接口类的使用会提供很大的帮助

    类中的成员

    分成三类:

      1.变量:

        1.实例变量(又可以说是字段):1),公有实例变量2),私有实例变量

    实例一:
                            class Foo:
                                # 类变量(静态字段)
                                country = "中国"
                                
                                def __init__(self,name):
                                    # 实例变量(字段)
                                    self.name = name  
                                
                                
                                def func(self):
                                    pass
                    
                    
                            obj1 = Foo('阿童木')
                            obj2 = Foo('葫芦娃')
                            
                            Foo.country

        2.类变量: 1),公有类变量2),私有类变量

    无法访问:
                            class Base(object):
                                __secret = "受贿"
    
                            class Foo(Base):
    
                                def func(self):
                                    print(self.__secret)
                                    print(Foo.__secret)
    
    
                            obj = Foo()
                            obj.func()
                                            
    可以访问:
                            class Base(object):
                                __secret = "受贿"
    
                                def zt(self):
                                    print(Base.__secret)
    
    
                            class Foo(Base):
    
                                def func(self):
                                    print(self.__secret)
                                    print(Foo.__secret)
    
    
                            obj = Foo()
                            obj.zt()

      2.方法:

        实例方法

    class Foo(object):
                                def __init__(self, name):
                                    self.name = name
    
                                # 实例方法
                                def func(self):
                                    print(self.name)
                                    
                            obj = Foo('..')
                            obj.func()

        静态方法

    class Foo(object):
                                def __init__(self, name):
                                    self.name = name
    
                                # 静态方法,如果方法无需使用对象中封装的值,那么就可以使用静态方法
                                @staticmethod
                                def display(a1,a2):
                                    return a1 + a2
                            Foo.display(1,3)

        类方法

    class Foo(object):
                            
                                # 类方法,cls是类
                                @classmethod
                                def show(cls,x1,x2):
                                    print(cls,x1,x2)
    
                            # 执行类方法
                            Foo.show(1,8)

      3.属性(通过方法改造出来):

                        class Foo(object):
                            def __init__(self):
                                pass
    
                            @property
                            def start(self):
                                return 1
    
                            @property
                            def end(self):
                                return 10
    
                        obj = Foo()
                        print(obj.start)
                        print(obj.end)
    总结:
      1.编写时:
        方法上方写@property
        方法参数:只有一个self
      2.调用时: 无需加括号 对象.方法
      3.应用场景:对于简单的方法,当无需传参且有返回值时,可以使用@property

    嵌套:

      面向对象:

    """
                    创建三个学校且三个学校的设施内容等都是一致.
                    """
    
                    class School(object):
                        def __init__(self, name, address):
                            self.name = name
                            self.address = address
    
                        def speech(self):
                            print('讲课')
    
                    obj1 = School('老男孩北京校区', '美丽富饶的沙河')
                    obj2 = School('老男孩上海校区', '浦东新区')
                    obj3 = School('老男孩深圳校区', '南山区')
                    class Teacher(object):
                        def __init__(self, name, age, salary):
                            self.name = name
                            self.age = age
                            self.__salary = salary
                            self.school = None
    
                    t1 = Teacher('李杰', 19, 188888)
                    t2 = Teacher('艳涛', 18, 60)
                    t3 = Teacher('女神',16, 900000)
                    # ############## 老师分配校区
                    t1.school = obj1
                    t2.school = obj1
                    t3.school = obj2
                    # ####################################
                    # 查看t1老师,所在的校区名称/地址
                    print(t1.school.name)
                    print(t1.school.address)
                    print(t1.name)
                    print(t1.age)
                    t1.school.speech()
    准则:字段和方法的归类
  • 相关阅读:
    js中验证身份证号码是否正确支持15位和18位身份证号
    vue-element-admin-i18n 前端框架的使用
    根据年份选择周数-js
    js 计算开始日期和结束日期跨度几个月份的方法
    Java上传图片到服务器
    c# List<Object>和List<实体>相互转化
    GC 相关详细参数
    Groovy脚本和Groovy类反编译文件
    dev 控件中点击TreeList节点高亮显示GridControl中存在的行
    spring容器
  • 原文地址:https://www.cnblogs.com/LLBFWH/p/10022626.html
Copyright © 2011-2022 走看看