• 第四章 python中的面向对象设计


    一、首先来理解几个面向对象的关键特性:

    1、封装:对象可以将他们的内部状态隐藏起来。python中所有特性都是公开可用的。

    2、继承:一个类可以是一个或多个类的子类。python支持多重继承,使用时需要注意继承顺序。

    3、多态:实现将不同类型的类的对象进行同样对待的特性--不需要知道对象属于哪个类就能调用方法。

    二、创建自己的类

    复制代码
     1 >>> class Person:           
     2 ...     def setname(self,name):
     3 ...             self.name = name
     4 ...     def getname(self):
     5 ...             return self.name
     6 ... 
     7 >>> p = Person()
     8 >>> p.setname('darren')
     9 >>> p.getname()
    10 'darren'
    复制代码

    很简单吧,这里有个self参数需要说明的,可以称为对象自身,它总是作为对象方法的第一个参数隐式传入!那么类中的有些方法不想被外部访问怎么办?
    可以在方法前加双下划线,如下:

    复制代码
     1 >>> class Sercrt:
     2 ...     def greet(self):
     3 ...             print("hello,abc")
     4 ...     def __greet1(self):
     5 ...             print("i don't tell you ")
     6 ... 
     7 >>> s = Sercrt()
     8 >>> s.greet()
     9 hello,abc
    10 >>> s.__greet1()
    11 Traceback (most recent call last):
    12   File "<stdin>", line 1, in <module>
    13 AttributeError: Sercrt instance has no attribute '__greet1'
    复制代码

    如何指定超类呢?通过子类后面跟上括号里面写入基类即可实现。

    复制代码
     1 >>> class Bird:       
     2 ...     def fly(self):
     3 ...             print("I want to fly more and more higher")
     4 ... 
     5 >>> class Swallow(Bird):
     6 ...     def fly(self):
     7 ...             print("Swallow can fly")
     8 ... 
     9 >>> 
    10 >>> s = Swallow()    
    11 >>> s.fly()
    12 Swallow can fly
    复制代码

     1、构造方法:创建一个新对象时,调用构造方法,用于类的初始化

    python中用__init__()表示构造方法,当子类继承父类时,如果子类重写了构造方法,这时如果要继承父类的构造方法,需要用super(子类,self).__init__()

    2、属性:porperty(get,set)

    3、静态方法和类成员方法:这两种方法无需创建对象,直接通过类名称进行调用,如下:

    复制代码
     1 >>> class Myclass:
     2 ...     @staticmethod
     3 ...     def smeth():
     4 ...             print("i am static method")
     5 ...     @classmethod
     6 ...     def cmeth(cls):
     7 ...             print("i am class method")
     8 ... 
     9 >>> 
    10 >>> Myclass.smeth()
    11 i am static method
    12 >>> Myclass.cmeth()
    13 i am class method
    复制代码

          

  • 相关阅读:
    项目中对axios进行二次封装
    vue对象数组数据变化,页面不渲染
    深拷贝和浅拷贝
    你说的都队-凡事预则立
    你说的都队——项目系统设计与数据库设计
    2020软件工程作业——团队04
    2020软件工程作业——团队03
    2020软件工程作业——团队02
    你说的都队——团队展示
    TCP协议
  • 原文地址:https://www.cnblogs.com/wangsicongde/p/7588483.html
Copyright © 2020-2023  润新知