• Python面向对象


      Python从设计之初就已经是一门面向对象的语言

      Python类:

        1)类定义:

    class 类名:
    def __init__(self, 参数, ...): # 构造函数,只在生成类的实例时被调用一次
    ...
    def 方法名1(self, 参数, ...): # 方法1,方法的第一个参数是self,表示自身的实例
    ...
    def 方法名2(self, 参数, ...): # 方法2
    ...

          实例化类:ClassName()

          类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性

          类有一个名为 __init__() 的特殊方法(构造方法),该方法在类实例化时会自动调用

        2)类实例方法

          在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self, 且为第一个参数,self 代表的是类的实例,代表当前对象的地址,而self.class则指向类。

        3)继承

          子类的定义语法如下:

    class sonClassName(fatherClassName1,fatherClassName2,fatherClassName3):
        <statement-1>
        .
        .
        .
        <statement-N>

        子类会继承父类的属性和方法

      4)类的私有属性

        __ filed:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用self.__field访问。

      5)类的私有方法

        __method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用,不能在类的外部调用。调用方式self.__method。

    #!/usr/bin/python3
     
    #类定义
    class people:
        #定义基本属性
        name = ''
        age = 0
        #定义私有属性,私有属性在类外部无法直接进行访问
        __weight = 0
        #定义构造方法
        def __init__(self,n,a,w):
            self.name = n
            self.age = a
            self.__weight = w
        def speak(self):
            print("%s 说: 我 %d 岁。" %(self.name,self.age))
     
    # 实例化类
    p = people('runoob',10,30)
    p.speak()

      6)类静态方法和类方法

        一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法。

        而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用

    class A(object):
      # 静态方法,既可以作为类的方法使用,也可以作为类的实例的方法使用
        @staticmethod
        def foo1(name):
            print 'hello', name
      # 类的实例方法
        def foo2(self, name):
            print 'hello', name
      # 类方法,cls作为第一个参数用来表示类本身. 在类方法中用到,类方法是只与类本身有关而与实例无关的方法,既可以作为类的方法使用,也可以作为类的实例的方法使用
        @classmethod
        def foo3(cls, name):
            print 'hello', name)

        Python静态方法和类方法的区别:

          静态方法:使用@staticmethod注解修饰,不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样;如果在静态方法中要调用到这个类的一些属性方法,只能直接类名.属性名或类名.方法名

          类方法:使用@classmethod注解修饰,也不需要self参数,但第一个参数需要是表示自身类的cls参数;因为持有cls参数,可以来调用类的属性,类的方法,实例化对象等,避免硬编码

      self和cls的区别:

         self 作为实例方法的第一个参数,表示当前类的实例

         cls 作为类方法的第一个参数,表示当前类

    END.

  • 相关阅读:
    P2073 送花(Treap维护双权值)
    P2041 [NOI2005]维护数列(Splay树支持插入区间、删除区间、修改区间、翻转区间、区间求和、区间带修改最大子列和的代码模板)
    P1801 黑匣子(Treap树)
    P3377 【模板】左偏树(可并堆)
    P1553 可怜的狗狗(可持久化线段树)
    P1503 鬼子进村(Treap树)
    Adobe CC 2017 全系列官方中文版32/64位
    Serverless简介
    小程序开发框架MPVue和uni-app
    ORM对象关系映射
  • 原文地址:https://www.cnblogs.com/yangyongjie/p/15786465.html
Copyright © 2020-2023  润新知