zoukankan      html  css  js  c++  java
  • 面向对象编程

     
    #类
    class 类名:
        def func(self):
            print('类中的实例方法')
    实例=类名()
    实例.func()
      #封装.
    # #把几个属性封装到对象中
    class ren:
        def __init__(self,name,age,gender,hobby):
            self.name=name
            self.age=age
            self.gender=gender
            self.hobby=hobby
    ren1=ren('小明',18,'男','玩耍')
    print(ren1.name)
    #继承
    #派生类继承基类的属性和动作
    class animal:
        huxi=True
        def chi(self):
            print('吃')
        def shui(self):
            print('睡')
        def he(self):
            print('喝水')
    class cat(animal):
        def zhualaoshu(self):
            print('抓老鼠')
    class dog(animal):
        def chaijia(self):
            print('拆家')
    cat1=cat()
    cat1.chi()
    cat1.shui()
    cat1.he()
    cat1.zhualaoshu()
    print(cat1.huxi)
    #多态
    #类中的实例方法a可以是任何类型的数据,
    # 可以是官方给定的数据类型.可以是自己定义的类.
    class foo:
        def func1(self,a):
            print(type(a))
            return type(a)
    shili=foo()
    shili.func1(True)
    shili.func1(1)
    shili.func1(1.2)
    shili.func1("hahah")
    shili.func1({12,123})
    shili.func1([1,1,23,34])
    shili.func1((1,2,3,4))
    shili.func1({'k1':12,'k2':15})
    shili.func1(cat1)
    shili.func1(ren1)
    
    #类方法
    class Foo1:
        @classmethod
        def func(cls,a1):
            print(a1)
    shili1=Foo1()
    shili1.func('你好1')
    Foo1.func('你好2')
    
    #实例方法
    class Foo2:
        def func(self,a1):
            print(a1)
    shili2=Foo2()
    shili2.func('你好3')
    Foo2.func(shili2,'你好4')#用类强行执行实例方法,
    
    #类和函数的区别:
    #在面向对象编程中方法是类里面编写的函数
    #1 定义时,实例方法至少需要一个self形参
    #2 调用时,实例方法需要通过实例对象来调用
    #在面向过程编程中,函数就是对某些动作和功能的封装
    #1 定义时,可以不传参数
    #2 调用时,只需要函数名()就可以
    
    #__new__与__init__
    #构造方法是__new__,会为对象创建一个内存空间,并把这个内存空间的地址返回给
    #初始化方法__init__.
     
    
    1. 面向对象帮你解决什么问题? 封装: 归类,将函数放置到一个类中. 打包,将数据打包放到一个对象.
    2. 三大特性 封装 继承 多态,Python原生支持多态,崇尚鸭子模型.由于Python函数传参时,无序指定类型: def func(arg): # arg可以是多种类型,只要其中有send方法即可.
                        arg.send()
    3. 编写面向对象程序
            归类+提取公共值
            
    4. self到底是谁?
            self参数是Python帮助我们自动传递.
            如果执行面向对象中的方法时,前面必须有一个对象: xxx.func()
            
            class Foo:
                def f1(self):
                    pass
                    
                def f2(self):
                    self.f1()
                    
            obj = Foo()
            obj.f2()
        
    5. Python支持多继承 
    6. 类的成员 
            
            class Foo:
                
                # 方法
                def __init__(self,name):
                    # 实例变量/字段
                    self.name = name     
                    
                # 方法
                def func(self):
                    pass 
        
            # obj,Foo类的对象
            # obj,Foo类的实例
            obj = Foo('朱奎峰')
        
        
            成员共分为三类:
            
                变量:
                    - 实例变量(字段) 
                        - 公有实例变量(字段) 
                        - 私有实例变量(字段) 
                    - 类变量(静态字段)
                        - 公有类变量(静态字段)
                        - 私有类变量(静态字段)
                        
                        实例一:
                            class Foo:
                                # 类变量(静态字段)
                                country = "中国"
                                
                                def __init__(self,name):
                                    # 实例变量(字段)
                                    self.name = name  
                                
                                
                                def func(self):
                                    pass
                    
                    
                            obj1 = Foo('季红')
                            obj2 = Foo('王晓东')
                            
                            Foo.country
                            
                    
                    思考题: 如何验证儿子都不知道私有字段的存在.
                    
                        无法访问:
                            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()
                    
                        
                方法:
                    - 实例方法
                            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)
    
                    面试题: 静态方法/类方法和实例方法的区别?
                    
                        
                属性(通过方法改造出来):
                    示例:
                        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
      """7. 嵌套 
                
                面向对象:
                    """
                    创建三个学校且三个学校的设施内容等都是一致.
                    """
    
                    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()
                
                准则: 字段和方法的归类.
            
                以前:
                    [
                        {"name":'alex1','age':18,xxx:999},
                        {"name":'alex2',age':18},
                    ]
    

      

  • 相关阅读:
    React antd的select框的onchange事件 只能点击一次 如果想选中的值 还可以被点击 就用onselect事件
    formatTime.js
    typeScript
    React react-router在url参数不同的情况下跳转页面不更新
    React 组件
    三、猜字符小游戏
    二、Java学习之方法
    Java学习之数组
    JavaWeb的学习--第五天 javascript03
    JavaWeb的学习--第四天 javascript02
  • 原文地址:https://www.cnblogs.com/PythonMrChu/p/9547941.html
Copyright © 2011-2022 走看看