• Python学习笔记(1)


    一、类的基本概念

    类是一组具有相同属性和方法的所有对象的集合或者抽象,定义一个类使用关键字 class , 类里面的方法必须接收一个self参数,该参数表示创建的对象本身,其语法如下:

    class test:
      name = ''
      age = 12
      height = 165
      
      def like(self):
        print('这是一个方法')

    对象是类的一个实体,类是对象的抽象;对象是客观世界存在的一个实体。 用类创建一个对象并调用内部的属性,如下:

    class Cat:
      name = ''
      def like(self):
        print('这是一个类的方法')
      def show(self):
        print(self.name)
    
    cat = Cat()
    cat.name = '属性赋值'
    cat.like()  #这是一个类的方法
    cat.show()  # 属性赋值

    每个类都默认存在一个__init__(self)   函数,称之为构造函数(初始化方法),用来创建对象,在创建对象的时候会自动调用。我们可以在创建对象的时候使用构造函数进行赋值:

    class Stu:
      def __init__(self, _name, _age):
        print('这是一个构造函数')
        self.name = _name
        self.age = _age
      name = ''
      age = ''
      def show(self):
        print(self.name, self.age)
    
    obj = Stu('小米', 18)   # 传参给构造函数进行赋值
    obj.show()     # 小米 18

    每个类都默认存在一个 __del__(self) 函数,称为析构函数(销毁时的方法),在对象被动(del 删除)或主动(程序执行完毕)销毁的时候,会自动调用。我们可以使用析构函数在对象即将销毁时执行某些逻辑。 

    class Stu:
      def __del__(self):
        print('这是一个析构函数')
    
    obj = Stu()   
    del obj

    类封装的目的:类内部的数据可以在外部直接访问,这种方式不安全。我们需要限制在类的外部不能随意访问属性,并对某些属性进行隐藏。类的变量分为私有变量和类变量:

    类的私有变量:在变量名前添加两个下划线开头,声明该属性为私有,不能在类的外部被使用或 访问。例如 __test = ‘这是私有属性’。如果必须在外部进行访问,可以使用 对象名._类名私有属性名  的方式进行访问 。对象名和类名之间有一个点和一个下划线,类名后面是私有属性名

    类的私有方法:类的私有方法跟私有变量一样,在方法名前加两个下划线开头 ; 在外部访问的方式也跟私有变量一样

    class Stu:
      __test = '这是私有变量'
      def get(self):
        return self.__test
    
    obj = Stu()
    print(obj._Stu__test)
    print(obj.get())

    类变量:指的是所有对象所共享的变量,类变量定义在类的定义之后,实例化前后都可以使用

    类变量可以用 类名.类变量 和  self.类变量  两种方式访问,后者一般不建议使用。类变量是所有对象所共享的,无论任何时候都建议用类名的方式访问类变量。

    class Stu:
      name = '这是类变量'
      def test(self):
        print(self.name)     #  两种方式都可以访问
        print(Stu.name)      # 推荐方式
    
    print(Stu.name)     # 外部使用类名也可以访问
    obj = Stu()
    obj.test()

    实例变量:指的是在__init__(self) 方法内声明的变量。 实例变量必须在实例化类后才能使用。实例变量只能通过对象访问(self), 不能通过类名访问。

    class Stu:
      def __init__(self, name, age):
        self.name = name           #  实例变量
        self.age = age

    类的三种方法分为 静态方法、类方法、实例方法。

    实例方法:只能被实例对象调用,第一个参数必须默认传实例对象,一般习惯用self。  在实例方法内部调用另一个实例方法,使用 self.方法名

    静态方法:使用 @staticmethod 修饰,对于参数没有要求,可以用 类名.方法名 和 self.方法名 两种方式访问。在静态方法内部调用另一个静态方法,使用 类名.方法名

    类方法:  使用@classmethod 修饰, 第一个参数必须默认传类, 一般习惯用 cls  。可以用 类名.方法名 和 self.方法名 两种方式访问

    class Stu:
      def __init__(self):
        print('这是一个实例方法')
    
      @staticmethod
      def statics():
        print('这是一个静态方法')
    
      @classmethod
      def classTest(cls):
        print('这是一个类方法')

    继承的概念:一个类从另一个类中继承一些属性和方法,(无法继承私有的)我们把这个类叫做子类(派生类),另一个类叫做父类(基类)。其语法如下:class childrenClass(parentClass)

    多继承:   一个子类可以同时继承多个父类,用 逗号隔开;如果继承的父类有相同的属性或者方法,则按照传入的顺序优先使用,先传先用。 

    继承传递: 如果A类继承B类, B类继承C类, 那么默认A类继承C类。

    类方法重写:  当子类继承的方法不适用的时候,可以进行重写。在子类内部定义一个跟继承方法相同名称的的方法,可以覆盖继承过来的方法。

    class parent:
      name = '这是父类属性'
      def show(self):
        print(parent.name)
    
    class children(parent):
      types = '这是子类属性' 
      def test(self):
        print(children.types)
    
    obj = children()
    obj.test()
    obj.show()
    不积跬步,无以至千里;不积小流,无以成江海。
  • 相关阅读:
    UART中的硬件流控RTS与CTS
    Yii smsto短信接口的函数
    分布式选主 利用Mysql ACID和Lease协议实现选主和高可用
    Extjs GridPanel 合计功能 解决滚动条滚动问题和页面刷新滚动条回到初始位置问题。
    基于ARM+LINUX的无线视频采集系统设计搭建嵌入式web服务器
    C++里父类的析构函数为什么声明为virtual
    重量过载 = 重载
    Spread Studio中文支持图解
    Android用户如何FQ访问被封锁的媒体资源
    将myeclipse 10.x以下版本web project的导入到myeclipse blue 2013 部署没有项目名
  • 原文地址:https://www.cnblogs.com/xuezhimin-esage-2020/p/14278513.html
Copyright © 2020-2023  润新知