zoukankan      html  css  js  c++  java
  • 第十二节:面向对象

    类:描述一类事物的共同特征,是一种抽象的概念

    对象:类的具体实现

    实例化:通过类创建一个具体的实例

    过程:实例化的对象在调用自己的数据属性,然后通过类调用类的函数属性,如果不是使用.的调用方式,打印的是变量是全局定义的变量,非对象的属性

    例题如下:

    class Dog:#D大写
       name='类'
    def __init__(self,name,action):#每次初始化实例的时候都会执行 self.name=name self.action=action def pinnt_info(self): print('一条狗叫%s' %(self.name)) def action_info(self): print('%s正在%s' %(self.name,self.action)) dog=Dog('哈士奇','玩耍') #实例化一条狗的对象 print(dog.name) #调用函数的数据属性 print(dog.action_info()) #调用对象的函数属性 print(dog.__dict__) #查看类或者对象的属性字典
    类的增删改查:#实例属性的增删改查和类相同,只不过作用域是实例属性自身,非类的属性
    增:Dog.name1 = '其他值'
    查:Dog.name   '类'
    改:Dog.name = '其他值'
    删:del Dog.name
    class Dog:#D大写
       name=''
        def __init__(self,name,action):#每次初始化实例的时候都会执行
            self.name=name
            self.action=action
        def pinnt_info(self):
            print('一条狗叫%s' %(self.name))
      @property#定义以下函数为静态属性
    def action_info(self): print('%s正在%s' %(self.name,self.action))
      @classmethod#d定义类的方法,可以调用类方法,不可以调用对象的方法
      def action_info(cls,a):
        print('%s在这%s' %(cls.name,a))
      @staticmethod#类静态方法,只是类的工具包,无法调用类和对象的属性
      def test(a):
        print('a')
        

    dog=Dog('哈士奇','玩耍')#先实例化对象
    静态属性的调用变得简单:
    直接dog.action_info就可以调用函数属性,相当于把函数属性变成了数据属性


    类的组合:

    class Hel:
        a = "测试"
    class Test:
        def __init__(self,name):
            self.name=name
            self.hel=Hel()
    ha = Hel()#实例化
    p=Test('laowang')#实例化
    print(p.hel.a)#待用组合类的属性

    类的继承和派生:

    子类继承父类的方法叫做继承,可以继承多个类

    子类自己定义的方法叫派生

    类调用方法先从自己的属性中寻找,找不到再从父类中查找

    继承顺序:

    python2.7:经典类 没有基类,继承从左向右一直到找不到,然后从第二个类开始找

    python2.7:新式类通python3一样,从左向右一直找到基类,找不到再找下一个

    用途1:多个类使用相同的方法可以将改方法提出来做基类

    用途2:接口继承作为归一设计

    class Dad:
        '父'
        money=10
        def __init__(self,name):
            self.name=name
        def hit_son(self):
            print('来自爸爸的方法' )
            
    class Son(Dad):
        money = 100
        def __init__(self,name,age):
            self.name=name
            self.age=age
        def hit_son(self):
            print('来自儿子的方法')

    接口继承:

    import abc
    class All_file(metaclass=abc.ABCMeta):
        @abc.abstractmethod
        def read(self):
            pass
    
        @abc.abstractmethod
        def write(self):
            pass
    
    class Disk(All_file):
        def read(self):
            print('disk read')
    
    #    def write(self):
    #       print('disk write')

    如果接口继承没有定义基类的方法那么会报错(提示无法实力化对象)
    TypeError: Can't instantiate abstract class Disk with abstract methods write

    子类调用父类方法:

    class Vehicle1:
        Country='China'
        def __init__(self,name,speed,load,power):
            self.name=name
            self.speed=speed
            self.load=load
            self.power=power
        def run(self):
            print('开动啦')
            print('开动啦')
    class Subway(Vehicle1):
            def __init__(self,name,speed,load,power,line):
               # Vehicle.__init__(self,name,speed,load,power)#不使用super函数进行调用
               # super().__init__(name,speed,load,power)  #super(__class__,self).__init__(name,speed,load,power)
               super(Subway,self).__init__(name,speed,load,power)#功能和上面的一样,相当于初始化父类的对象,好处是不管父类如何改动,不会影响子类的调用
               self.line=line
            def show_info(self):
                print(self.name,self.speed,self.load,self.power,self.line)
            def run(self):
                # Vehicle.run(self)
                super().run()#直接调用父类的方法
                print('%s %s 线,开动啦' %(self.name,self.line))
    line13=Subway('地铁','1km/s',100,'',13)
    line13.show_info()
    line13.run()
  • 相关阅读:
    elasticsearch(0.90.10)安装配置+超多插件!!
    【架构】基于Nutch+Hadoop+Hbase+ElasticSearch的网络爬虫及搜索引擎
    Elasticsearch(1.1.1)基础教程pdf
    hadoop1.2.1+hbase0.94.11+nutch2.2.1+elasticsearch0.90.5安装配置攻略
    安装和使用 Elasticsearch(1.1.1)+marvel插件、Kibana插件
    nutch2.1+mysql+elasticsearch整合linux单机部署
    Nutch 快速入门(Nutch 2.2.1+Hbase+Solr)
    Linux中VMware虚拟机增加磁盘空间的扩容操作
    java8使用stream的collect进行list转map注意事项
    Java 8 指南
  • 原文地址:https://www.cnblogs.com/sxdpython/p/12702143.html
Copyright © 2011-2022 走看看