Table of Contents

属性

对象初始化

构造方法(函数)

析构方法(函数)

类的方法

实例方法

类方法

静态方法

类的继承

继承类构造方法

方法与属性的继承

属性

Sample:

class Book:

name = "C Programming"

__publisher = "T University"

def show(self):

print(self.name, self.__publisher)

b = Book()

b.show() # b.__publisher and Book.__publisher are restricted

b.name = "Python" # Assign "Python" to name property

b.author = "God" # Add new property "author" to instance b

print(b.name, b.author) # b has author

print(Book.name) # Book does not have author.

Result:

C Programming T University

Python God

C Programming

Key points:

一般的属性都是公有的,如果想要定义成私有的,则要在属性前面加2个下划线“__”

有两种访问属性的方式 ,Book.name 或者b.name

实例有结合任何属性的功能:

对象实例.属性=...

如果该对象实例存在这个属性,这个属性的值就被改变;

如果不存在该属性就会自动为该对象实例创建这个属性。

对象初始化

构造方法(函数)

Sample:

class Book:

name = "C Programming"

def __init__(self, n):

self.name = n

b = Book("Python")

print(b.name)

Result:

Python

Key points:

构造方法__init__(self, ...)在生成对象时调用,可以用来进行一些初始化操作,不需要显示的去调用,系统默认去执行。如果用户自己没有重新定义构造方法,系统就自动执行默认的构造方法。

一个类中构造函数只能有一个(构造函数没有重载)。要想实现重载的功能,可以给构造函数的参数写默认值, e.g. def __init__(self, name="", publisher="TTT")

析构方法(函数)

Sample:

class Book:

name = "C Programming"

def __init__(self, n):

self.name = n

print("__init__",self)

def __del__(self):

print("__del__", self)

b = Book("Python")

print(b.name)

Result:

__init__ <__main__.book object at>

Python

__del__ <__main__.book object at>

Key points:

析构方法__del__(self)在释放对象时调用,可以在里面进行一些释放资源的操作,不需要显示调用。

类的方法

实例方法

Sample:

class Book:

name = "C Programming"

def show(self):

print(self.name)

b = Book()

b.show()

b.name = "C++"

Book.show(b)

Result:

C Programming

C++

Key points:

实例方法至少有一个参数,一般命名为“self”(也可以是其他名称)。

实例方法通过实例对象调用。例如, b.show()。

如果使用类名称调用需要认为传递实例参数,例如:Book.show(b)。

实例方法被调用时要向它的第一个参数传递实例对象。

类方法

Sample:

class Book:

name = "C Programming"

@classmethod

def show_name(cls):

print(cls.name)

b = Book()

b.name = "Python"

Book.show_name()

b.show_name()

Result:

C Programming

C Programming

Key points:

类方法使用@classmethod来修饰,而且第一个参数一般命名为cls(也可以命名为别的名称)。

类方法通常使用类的名称调用,例如:Book.show_name().

类方法也可以使用实例调用,例如:b.show_name()

类方法调用时会向它的第一个参数传递类的名称。

静态方法

Sample:

class Book:

name = "C Programming"

@staticmethod

def show():

print(Book.name)

b = Book()

b.name = "Python"

b.show()

Book.show()

Result:

C Programming

C Programming

Key points:

静态方法通过@staticmethod修饰。

通常采用类的名称或者实例来调用静态方法,例如:Book.show(), b.show()

在调用静态方法时不会向函数传递任何参数。

类的继承

继承类构造方法

Sample:

class Person:

name = "Sample name"

gender = "male"

age = 18

def __init__(self, n, g, a):

self.name = n

self.gender = g

self.age = a

def show(self):

print(self.name,self.gender,self.age, end=" ")

class Student(Person):

def __init__(self, n, g, a, m, d):

Person.__init__(self, n, g, a)

self.major = m

self.dept = d

def show(self):

Person.show(self)

print(self.major, self.dept)

s = Student("Holly", "female", 20, "Software", "CS")

s.show()

Result:

Holly female 20 Software CS

Key points:

在继承中基类的构造方法(__init__()方法)不会被自动调用,它需要在其派生类的构造方法中显示的调用下。不同于C#。

在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。不同于在类中调用普通方法时不需要带上self参数的情况。

Python总是首先查找对应类型的方法,如果在派生类中找不到对应的方法,才去到基类中逐个查找。(先在当前类中查找调用的方法,找不到才去基类中找)

方法与属性的继承

Sample:

class Person:

className = "Person"

name = "Sample name"

gender = "male"

age = 18

def __init__(self, n, g, a):

self.name = n

self.gender = g

self.age = a

def show(self):

print(self.name,self.gender,self.age, end=" ")

def display(self):

print("Person display", self)

@classmethod

def class_class_name(cls):

print("class method: ", cls, cls.className)

@staticmethod

def static_class_name():

print("Static method: ", Person.className)

class Student(Person):

className = "Student"

def __init__(self, n, g, a, m, d):

Person.__init__(self, n, g, a)

self.major = m

self.dept = d

def show(self):

Person.show(self)

print(self.major, self.dept)

s = Student("Holly", "female", 20, "Software", "CS")

s.show()

s.display()

Student.class_class_name()

Student.static_class_name()

Result:

Holly female 20 Software CS

Person display <__main__.student object at>

class method:   Student

Static method:  Person

Key points:

如果一个基类中有一个实例方法,在继承类中可以重新定义完全一样的实例方法,例如Person有show方法,在Student中也有一样的show方法,他们是不会混淆的,我们称Student类的show重写了Person的show。

当然一个基类的实例方法也可以不被重写,派生类会继承这个基类的实例方法。

派生类也可以增加自己的新实例方法。

python编程技术总结_Python面向对象编程(OOP)技术总结相关推荐

  1. python面向对象编程138讲_Python面向对象编程简单讲解

    学习目标: 1-面向对象编程 2-类和对象 3-对象的属性和方法 4-类的特性 Python面向对象编程 一种编程程序的设计思想,把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数.把计算机 ...

  2. python面相对象编程超市系统_python面向对象编程: 面向对象版学员管理系统

    转载自https://www.cnblogs.com/LynHome/archive/2020/04/06/12650318.html 详细解读请参考https://www.cnblogs.com/b ...

  3. python交互界面实例_Python面向对象编程扑克牌发牌程序,另含大量Python代码!

    1. 题目 编写程序, 4名牌手打牌,计算机随机将52张牌(不含大小鬼)发给4名牌手,在屏幕上显示每位牌手的牌. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后, ...

  4. python类详解_python面向对象编程:python类和实例讲解

    东尧爱分享 这是东尧每天一篇文章的第51天 东尧写文章的目标:分享东尧的经验和思考,帮你获取物质和精神两方面幸福. 1 什么是对象 在python里面,一切皆为对象.也就是说python里的所有数据都 ...

  5. python的面向对象编程项目案例_python面向对象编程实例ants vs bees

    [实例简介] 本实例为用python语言编写,以python的面向对象.列表.局部变量等部分知识为基础,内容类似于popcap的植物大战僵尸的游戏项目 本实例为UC berkeley课程CS61A的p ...

  6. python函数的作用降低编程复杂度_Python函数式编程

    lambda 本文将介绍Python中函数式编程的特性.在对函数式编程的概念有了了解后,本文会介绍iterators和generators等语言特性,还有itertools和functools等相关的 ...

  7. python归一化 增大差异_简学Python第六章__class面向对象编程与异常处理

    Python第六章__class面向对象编程与异常处理 欢迎加入Linux_Python学习群 群号:478616847 目录: 面向对象的程序设计 类和对象 封装 继承与派生 多态与多态性 特性pr ...

  8. 从零学python黑马程序员_Python实战编程--从零学Python/Python应用编程丛书

    导语 内容提要 黑马程序员编著的<Python实战编程--从零学Python>涵盖了Python开发的核心知识.其中,第1-13章主要讲解的是Python的核心语法,包括基本概念和语句.风 ...

  9. Python基础十五:面向对象编程四:高级特性

    Python基础十五:面向对象编程四:高级特性 Python基础系列内容为学习廖雪峰老师Python3教程的记录,廖雪峰老师官网地址:廖雪峰Python3教程 Author:yooongchun Em ...

最新文章

  1. 一文读懂大数据漏斗分析!
  2. 基于区块链的健康链系统设计与实现(6)结束语
  3. Hough变换原始形式-直线检测
  4. java常用的框架介绍
  5. 关于Visual Studio 2019的前期详情
  6. wordpress增删改查
  7. Linux无法登陆,var目录权限修改导致SSH失败
  8. BEC translation exercise 4
  9. c语言银行卡管理系统程序设计报告,C语言课程设计报告(银行账户信息管理系统).doc...
  10. Google开放最大目标检测数据集,还要为它举办AI挑战赛
  11. 学生信息管理系统(c++源代码实现)
  12. 10个简单的放松运动
  13. xml大于等于转移_Mybatis.xml文件中大于小于等于
  14. windows 离线安装nessus
  15. 炒作与现实的博弈,厂商大肆宣传自动驾驶致司机陷入危险
  16. C语言习题:输入10个学生5门课的成绩,分别用函数实现下列功能:①计算每个学生的平均分;②计算每门课的平均分;③找出所有50个分数中最高的分数所对应的学生和课程;④计算平均分方差;
  17. android照片涂抹功能,android照片涂画功能实现过程及原理
  18. 4种SpringBoot 接口幂等性的实现方案!最后一个80%以上的开发会踩坑
  19. 曾经学舞度芳年(代序)
  20. CP-ABE方案形式化定义及安全模型总结

热门文章

  1. 解决RTMP推送时间戳问题引起HLS切片不均匀导致手机浏览器播放卡顿的问题
  2. 第一章:了解SQL_数据库基础
  3. 模板 manacher算法
  4. Nginx实用教程(二):配置文件入门
  5. 正则表达式(一) -- 元字符(转)
  6. jqGrid方法整理
  7. Apache下的配置文件httpd.conf、httpd-vhosts.conf 转
  8. 算法:求两个数最大公约数
  9. 无法启用插件,因为它引起了一个致命错误(fatal error)。
  10. Graphics 单元中的类