zoukankan      html  css  js  c++  java
  • [Python基础]005.语法(4)

    语法(4)


    创建

    • 与其他大部分语言一样,Python也用 class 来创建类。

        class Person:       # Person类
            pass            # 空语句
    • 创建实例

        person = Person()   # 创建Person实例
        print person        # 会打印出实例信息

    self

    • Python中使用 self 来指代实例自己,相当于Java、C++中的 this
    • Python中类的每个成员方法第一个参数必须是 self,这样类中每个方法就都可以调用到实例自己。

    方法

    • 成员方法: 以self作为第一个参数

        class Person:
      
            def sleep(self, t):         # 定义成员方法
                print 'sleep %f' % t        
                print self              # 实例信息
      
        Person().sleep()
    • 构造方法__init__是Python类的构造方法。

        class Person:
      
            def __init__(self, name, age):      # 构造方法
                print name
                print age
                pass

      创建实例时写入参数

        person = Person('AC', 30)

      也可以像普通方法一样,定义默认参数

        class Person:
            def __init__(self, name, age=10):
                print name
                print aeg
                pass
      
        person = Person('AC')
    • 类方法: 静态方法,相当于Java与C++里的static方法
      只要不写self变量,方法就是静态方法,还需要加上@staticmethod来修饰。

        class Person:
      
            @staticmethod       # 方法修饰
            def count():        # 类方法
                return 0
      
        print Person.count() 

    变量

    • 类变量: 静态变量,相当于static
      调用时用 类名.变量名

        class Person:
            num = 0                 # 定义类变量num
      
            @staticmethod
            def count():
                return Person.num   # 类方法调用
      
        print Person.num            # 调用
        print Person.count()
    • 成员变量: 定义和调用时都直接用 self.变量名

        class Person:
      
            def __init__(self, name, age):
                self.name = name            # 创建name属性,并赋值
                self.age = age              # 创建age属性,并赋值
      
            def info(self):                 
                print self.name             # 调用
                print self.age

    综合例子

    # Person.py
    
    class Person:
    
        num = 0     # 总人数
    
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
            Person.num = Person.num + 1     # 每创建一个实例,总人数加1
    
        @staticmethod
        def count():
            """
            获得总人数
            """
            return Person.num
    
        def info(self):
            """
            打印信息
            """
            print self.name
            print self.age
    
    
    p1 = Person('AC', 30)
    p2 = Person('Mount', 18)
    
    p1.age = 31         # 修改变量
    
    print p1.info()
    print p2.info()
    print Person.count()

    继承

    • 在定义类时,在类名后加上(父类)

        # Programmer.py
      
        from Person import Person
      
        class Programmer(Person):
            pass

      这样Programmer就继承了Person。

    • 没有继承的类与Java一样都默认继承自一个继承类 object
      相当于

        class Person(object):
            pass
    • 方法重写

        # Programmer.py
      
        from Person import Person
      
        class Programmer(Person):
      
            def __init__(self, name, age, lang):     # 重写构造方法
      
                Person.__init__(self, name, age)     # 调用父类构造方法
      
                self.lang = lang                      # 添加的语言属性
      
            def info(self):                           # 重写父类方法
                print 'Programmer'
                print self.name
                print self.age
      
        Programmer('AC', 30, 'lua').info()
        print Person.couont()

      除了重写的方法,Programmer类会继承Person类的一切。

    • 没有继承的类与Java一样都默认继承自一个继承类 object
      相当于

        class Person(object):
            pass
    • Python支持多重继承

        class A:
            pass
        class B:
            pass
        class C:
            pass
      
        class Person(A, B, C):          # 继承多个类
            pass

     

    本站文章为 宝宝巴士 SD.Team 原创,转载务必在明显处注明:(作者官方网站: 宝宝巴士 
    转载自【宝宝巴士SuperDo团队】 原文链接: http://www.cnblogs.com/superdo/p/4528963.html

     

  • 相关阅读:
    关于Class.getResource和ClassLoader.getResource的路径问题
    spring源码第一章_获取源码并将源码转为eclipse工程
    《ORACLE数据库管理与开发》第三章学习之常用函数记录
    hibernate部分源码解析and解决工作上关于hibernate的一个问题例子(包含oracle中新建表为何列名全转为大写且通过hibernate取数时如何不用再次遍历将列名(key)值转为小写)
    整合Spring时Service层为什么不做全局包扫描详解
    Tomcat启动时加载数据到缓存---web.xml中listener加载顺序(例如顺序:1、初始化spring容器,2、初始化线程池,3、加载业务代码,将数据库中数据加载到内存中)
    tomcat出现的PermGen Space问题
    org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/pcisv7]]
    用户线程和守护线程
    @override的意思
  • 原文地址:https://www.cnblogs.com/superdo/p/4528963.html
Copyright © 2011-2022 走看看