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

Posted dreamOnly

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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中可以多重继承

以上是关于python学习之路-第七天-python面向对象编程简介的主要内容,如果未能解决你的问题,请参考以下文章

python自动化开发学习第七天

Python基础-第七天-面向对象编程进阶和Socket编程简介

Python第七天

Python学习第七天

python学习之路基础篇(第七篇)

python修炼第七天