• python学习之路-第七天-python面向对象编程简介


    面向对象编程

    在python中,同样是类和对象作为重要的组成部分。

    而且在python中基本数据类型如int都是有封装类的,都有自己的方法,应该是和java里面的Integer类似吧

    类包括域和方法:域也就是类或对象中的变量,方法就是类里面声明的函数

    self关键字:

    相当于java中的this,下面是个例子:

    #!/usr/bin/python
    # Filename: method.py
    
    class Person:
        def sayHi(self):
            print 'Hello, how are you?'
    
    p = Person()
    p.sayHi()
    
    # This short example can also be written as Person().sayHi()
    

    你一定很奇怪Python如何给self赋值以及为何你不需要给它赋值。举一个例子会使此变得清晰。假如你有一个类称为MyClass和这个类的一个实例MyObject。当你调用这个对象的方法MyObject.method(arg1, arg2)的时候,这会由Python自动转为MyClass.method(MyObject, arg1, arg2)——这就是self的原理了。这也意味着如果你有一个不需要参数的方法,你还是得给这个方法定义一个self参数。

    init方法的使用和说明(相当于构造函数):

    用来在类被实例化后马上就被运行的一段程序,用来作为对象的初始化操作

    #!/usr/bin/python
    # Filename: class_init.py
    
    class Person:
        def __init__(self, name):
            self.name = name
        def sayHi(self):
            print 'Hello, my name is', self.name
    
    p = Person('qjx')
    p.sayHi()
    
    # This short example can also be written as Person('qjx').sayHi()
    
    $ python class_init.py
    Hello, my name is qjx
    

    del方法的使用和说明(相当于析构函数):

    他是用在对象被释放后运行的一段程序,用来释放资源等操作,一般在程序消逝后自动进行,如果要手动释放,就要显示的调用del语句

    一般的,对于变量和方法的作用域

    • __privatevar(两个下划线前缀)python会把它作为私有变量

    • 还有一个惯例,也就是平常人们的命名习惯,如果某个变量只想在类或对象中使用,就应该以单下划线前缀。

    • 其他的名称都将作为公共的,可以被其他类/对象使用

    继承(SchoolMember类被称为 基本类 或 超类 。而Teacher和Student类被称为 导出类 或 子类 )

    #!/usr/bin/python
    # Filename: inherit.py
    
    class SchoolMember:
        '''Represents any school member.'''
        def __init__(self, name, age):
            self.name = name
            self.age = age
            print '(Initialized SchoolMember: %s)' % self.name
    
        def tell(self):
            '''Tell my details.'''
            print 'Name:"%s" Age:"%s"' % (self.name, self.age),
    
    class Teacher(SchoolMember):
        '''Represents a teacher.'''
        def __init__(self, name, age, salary):
            SchoolMember.__init__(self, name, age)
            self.salary = salary
            print '(Initialized Teacher: %s)' % self.name
    
        def tell(self):
            SchoolMember.tell(self)
            print 'Salary: "%d"' % self.salary
    
    class Student(SchoolMember):
        '''Represents a student.'''
        def __init__(self, name, age, marks):
            SchoolMember.__init__(self, name, age)
            self.marks = marks
            print '(Initialized Student: %s)' % self.name
    
        def tell(self):
            SchoolMember.tell(self)
            print 'Marks: "%d"' % self.marks
    
    t = Teacher('Mrs. Shrividya', 40, 30000)
    s = Student('Swaroop', 22, 75)
    
    print # prints a blank line
    
    members = [t, s]
    for member in members:
        member.tell() # works for both Teachers and Students
    
    $ python inherit.py
    (Initialized SchoolMember: Mrs. Shrividya)
    (Initialized Teacher: Mrs. Shrividya)
    (Initialized SchoolMember: Swaroop)
    (Initialized Student: Swaroop)
    
    Name:"Mrs. Shrividya" Age:"40" Salary: "30000"
    Name:"Swaroop" Age:"22" Marks: "75"
    

    Python在子类中不会自动调用基本类的constructor,你得亲自专门调用它。

    Python中可以多重继承

  • 相关阅读:
    #leetcode687.最长同值路径
    #leetcode404.所有左叶子节点之和
    #leetcode111.二叉树的最小深度
    #leetcode101.对称二叉树
    #leetcode437.路径总和II
    #leetcode112.路径总和
    #leetcode543.二叉树的直径
    #leetcode110.平衡二叉树
    springboot数据库密码加密-使用自定义加密算法
    PHP加密
  • 原文地址:https://www.cnblogs.com/qjx-2016/p/7922246.html
Copyright © 2020-2023  润新知