zoukankan      html  css  js  c++  java
  • 类 经典类 新式类 对象

    面向对象介绍
     
    世界万物,皆可分类
    世界万物,皆为对象
     
    只要是对象,就有属性
    只要是对象,就有分类
     
    特性
    类 class
     
    一个类即是对一类拥有相同属性的对象的抽象蓝图、原型。
    在类中定义了这些对象都具备的属性
     
    对象 object
     
    一个对象即是一个类的实例化后的实例,是个抽象的东西,一个类必须经过实例化后方可在程序中使用
    一个类可以实例化多个对象,每个对象可以有自己不同的属性
    

      

    封装 encapsulation
    在类中对数据的赋值、内部调用对外部用户都是透明的,这类变成了一个胶囊或容器,里面包含着类的属性和方法
    内部的功能都封装了,外部无法访问
    就是私有函数 __ 来实现的一种方法
     
     
    举例
    上下两种方法的区别在哪里,有什么弊端,有什么优势?
    class dog:
        def __init__(self,name):
            self.name = name
     
        def bulk(self):
            print ("%s wang wang"% self.name)
     
    d1 = dog("d1")
    d1.bulk()

    class dog:
    def __init__(self):
         pass
     
    def bulk(self,name):
         print ("%s wang wang "%name)
     
    d3 = dog()
    d3.bulk("dog_3")
    d4 = dog()
    d4.bulk("dog_4")
     
    构造函数__init__
     
    __init__方法的第一个参数永远是slef,表示创建实例本身,因此,在__init__方法内部,可以把各种
    属性绑定到self,因为self指向创建实例的本身
     
    #用于在实例化的时候做一些初始化的工作
    #类名
    class cs:
        n = 123   #类变量  #先找实例变量,没有实例变量找类变量
        def __init__(self,name,role,wapon,life=100,money=15000):
              #构造函数,用来对类的做初始化的工作
              self.name = name         #实例变量(静态属性),作用域就是本身
              self.role = role
              self.wapon = wapon
              self.life = life
              self.money = money
     
        def person(self):               #类的方法,功能(动态属性)
              print ("%s"%self.role,self.name)
     
    role_1 = cs("king","police","ak")   #生成一个实例
    role_1.add_attrbute = "100"         #增加属性
    role_1.name = "renmae lisi"         #修改属性
    del r1.weapon                       #删除属性
    print (role_1.add_attrbute,role_1.name,role_1.wapon(会提示没有这个属性))
     
    class Role:
        name = "out_ini_"
        name_list = []
        def __init__(self,name,age=None):
            self.name = name
            self.age = age
     
        def test(self):
            print (self.name)
            print (self.age)
     
    r1 = Role("zhangsan","20")
    r1.name_list.append("from r1")
    r2 = Role("lisi","50")
    r2.name_list.append("from r2")
    print (r2.name_list,r1.name_list)
    #打印 因为str和tuple是不可变变量,list和dict是可变变量
    ['from r1', 'from r2'] ['from r1', 'from r2']
     
    语法
    属性
     
    tuple,list与str的区别
     
     
    方法
    问 : 类变量的用途?
    答 : 大家公用的属性
     
    举例
    class person(name,age,addr)
         ch = "中国"
         def __init__(self,name,age,addr):
              self.name = name
    p1 = person(name,age,addr)
     
    析构函数
    在实例释放、销毁的时候执行的,通常用于做一些结尾和收尾工作,不用调用最后执行
    如关闭一些数据库连接,打开的临时文件
     
    #在对象释放或销毁的时候自动执行,删除实例化
    def __del__(self):
         print ("%s 彻底销毁..")%"ssss"
     
    私有方法、私有属性
     
    私有属性:
    def __init__(self,name):
         self.__name__ = name    #私有属性
     
    def show_Status(self):
         print (%nself.__ame)
     
    r1.showstatus()              #只有在def里才能改,要使用的话需要先定一个调用私有方法的函数,需要才能调用
    私有方法:
    只能在内部调用,不能在类外部调用
    class Person:
        def __init__(self,name):
            self.name = name
            print (self.name)
     
        def __work(self,salary):   #定义私有方法
            print ("%s salary is: %d"%(self.name,salary))
     
        def worker(self):
            self.__work(500)      #在内部调用,外部的话会找不到私有方法
     
    if __name__=="__main__":
        officer = Person("Tom")
        officer.worker()
     
    继承 Inheritance
    一个类可以派生出子类,在这个父类里定义的属性、方法自动被子类继承
     
    子类可以继承父类
    子类之间不能直接调用
    class people:
        def __init__(self,name,age=10):
            self.name = name
            self.age = age
     
        def eat(self):
            print ("%s is eating..."%self.name)
     
        def sleep(self):
            print ("%s is sleeping.."%self.name)
     
        def talk(self):
            print ("%s is talking.."%self.name)
     
    class man(people):              #继承people的类
        pass
     
    m_1 = man("TOM")                #直接调用
    m_1.eat()
     
    修改父类方法
    class people:
        def __init__(self,name,age=10):
            self.name = name
            self.age = age
     
        def eat(self):
            print ("%s is eating..."%self.name)
     
        def sleep(self):
            print ("%s is sleeping.."%self.name)
     
        def talk(self):
            print ("%s is talking.."%self.name)
     
    class man(people):
     
        def piao(self):
            print ("%s is piao ..."%self.name)
     
        def modify_function(self):
            people.sleep(self)                     #修改父类
            print ("modify...father function..%s"%self.name)
     
    m1 = man("tom")                                  #继承父类,没有初始化,都继承过来
    m1.piao()
    m1.modify_function()                             #修改父类的方法
     
    子类增加初始化构造函数
    class people:
        def __init__(self,name,age=10):
            self.name = name
            self.age = age
     
        def eat(self):
            print ("%s is eating..."%self.name)
     
        def sleep(self):
            print ("%s is sleeping.."%self.name)
     
        def talk(self):
            print ("%s is talking.."%self.name)
     
    class man(people):
         def __init__(self,name,age,money)                     #沿用父类的属性,并加上自己的新属性
              people.__init__(self,name,age)                   #调用父类的构造函数,自己再增加一个moeny的属性
              #super(man,woman,self).__init__(name,age)        #另一种重构造父类方法,只是不用再修改父类调用的people这个名字,还支持多继承
              self.money = moeny 
              print "money"
     
        def piao(self):
            print ("%s is piao ..."%self.name)
     
        def modify_function(self):
            people.sleep(self)                  
            print ("modify...father function..%s"%self.name)
     
    m1 = man("tom")                            
    m1.piao()
    m1.modify_function()                        
     
     
    区别主要提现在多继承顺心上(多继承)
    python3 经典类和新势类 广度优先
     
    python2 经典类 是深度优先
    python2 新势类 是广度优先
     
    经典类
    class people:
        def __init__(self):
              pass
     
    新势类
    class people(object):
         def__init__(self):
              pass
     
    多继承
     
    class people(object):
        def __init__(self,name):
            self.name = name
     
    class relation(object):
        def make_friends(self,obj):
            print ("%s make friends %s"%(self.name,obj.name))
     
    class man(people,relation):
        def run(self):
            print (self.name)
     
    m1 = man("tom")
    m2 = man("jack")
    m1.make_friends(m2)
     
    tom make friends jack..
     
    多态 Polymorphism
    简单说 : 一个统一接口多个实现
    主要作用就是实现接口的重用
     
    举例
    销售是一个类
    技术是一个类
    行政是一个类
     
    例如老板说9点开始工作,员工都开始工作,那么不需要分别对销售部说工作、对技术部、行政部也去说工作
    这样的话,只要调用员工类中的工作属性就可以实现全员工作
     
    class animal:
    def __init__(self,name):
         self.name = name
     
    @staticmethod
    def animal(obj)
         obj.talk()
     
    class cat(animal):
         def talk(self)
              print (" meow ")
     
    class dog(animal):
         def talk(self)
              print (" wow wow ")
     
    c = cat("jack")
    d = dog("tom")
     
    Animal.animal.talk(c)
    Animal.animal.talk(d) 
  • 相关阅读:
    15. DML, DDL, LOGON 触发器
    5. 跟踪标记 (Trace Flag) 834, 845 对内存页行为的影响
    4. 跟踪标记 (Trace Flag) 610 对索引组织表(IOT)最小化日志
    14. 类似正则表达式的字符处理问题
    01. SELECT显示和PRINT打印超长的字符
    3. 跟踪标记 (Trace Flag) 1204, 1222 抓取死锁信息
    2. 跟踪标记 (Trace Flag) 3604, 3605 输出DBCC命令结果
    1. 跟踪标记 (Trace Flag) 1117, 1118 文件增长及空间分配方式
    0. 跟踪标记 (Trace Flag) 简介
    SpringBoot + Redis + Shiro 实现权限管理(转)
  • 原文地址:https://www.cnblogs.com/zoee/p/5832196.html
Copyright © 2011-2022 走看看