zoukankan      html  css  js  c++  java
  • 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.

  • 相关阅读:
    POJ1486 Sorting Slides 二分图or贪心
    POJ2060 Taxi Cab Scheme 最小路径覆盖
    POJ3083 Children of the Candy Corn 解题报告
    以前的文章
    POJ2449 Remmarguts' Date K短路经典题
    这一年的acm路
    POJ3014 Asteroids 最小点覆盖
    POJ2594 Treasure Exploration 最小路径覆盖
    POJ3009 Curling 2.0 解题报告
    POJ2226 Muddy Fields 最小点集覆盖
  • 原文地址:https://www.cnblogs.com/yangyongjie/p/15786465.html
Copyright © 2011-2022 走看看