python编程技术总结_Python面向对象编程(OOP)技术总结
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)技术总结相关推荐
- python面向对象编程138讲_Python面向对象编程简单讲解
学习目标: 1-面向对象编程 2-类和对象 3-对象的属性和方法 4-类的特性 Python面向对象编程 一种编程程序的设计思想,把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数.把计算机 ...
- python面相对象编程超市系统_python面向对象编程: 面向对象版学员管理系统
转载自https://www.cnblogs.com/LynHome/archive/2020/04/06/12650318.html 详细解读请参考https://www.cnblogs.com/b ...
- python交互界面实例_Python面向对象编程扑克牌发牌程序,另含大量Python代码!
1. 题目 编写程序, 4名牌手打牌,计算机随机将52张牌(不含大小鬼)发给4名牌手,在屏幕上显示每位牌手的牌. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后, ...
- python类详解_python面向对象编程:python类和实例讲解
东尧爱分享 这是东尧每天一篇文章的第51天 东尧写文章的目标:分享东尧的经验和思考,帮你获取物质和精神两方面幸福. 1 什么是对象 在python里面,一切皆为对象.也就是说python里的所有数据都 ...
- python的面向对象编程项目案例_python面向对象编程实例ants vs bees
[实例简介] 本实例为用python语言编写,以python的面向对象.列表.局部变量等部分知识为基础,内容类似于popcap的植物大战僵尸的游戏项目 本实例为UC berkeley课程CS61A的p ...
- python函数的作用降低编程复杂度_Python函数式编程
lambda 本文将介绍Python中函数式编程的特性.在对函数式编程的概念有了了解后,本文会介绍iterators和generators等语言特性,还有itertools和functools等相关的 ...
- python归一化 增大差异_简学Python第六章__class面向对象编程与异常处理
Python第六章__class面向对象编程与异常处理 欢迎加入Linux_Python学习群 群号:478616847 目录: 面向对象的程序设计 类和对象 封装 继承与派生 多态与多态性 特性pr ...
- 从零学python黑马程序员_Python实战编程--从零学Python/Python应用编程丛书
导语 内容提要 黑马程序员编著的<Python实战编程--从零学Python>涵盖了Python开发的核心知识.其中,第1-13章主要讲解的是Python的核心语法,包括基本概念和语句.风 ...
- Python基础十五:面向对象编程四:高级特性
Python基础十五:面向对象编程四:高级特性 Python基础系列内容为学习廖雪峰老师Python3教程的记录,廖雪峰老师官网地址:廖雪峰Python3教程 Author:yooongchun Em ...
最新文章
- 一文读懂大数据漏斗分析!
- 基于区块链的健康链系统设计与实现(6)结束语
- Hough变换原始形式-直线检测
- java常用的框架介绍
- 关于Visual Studio 2019的前期详情
- wordpress增删改查
- Linux无法登陆,var目录权限修改导致SSH失败
- BEC translation exercise 4
- c语言银行卡管理系统程序设计报告,C语言课程设计报告(银行账户信息管理系统).doc...
- Google开放最大目标检测数据集,还要为它举办AI挑战赛
- 学生信息管理系统(c++源代码实现)
- 10个简单的放松运动
- xml大于等于转移_Mybatis.xml文件中大于小于等于
- windows 离线安装nessus
- 炒作与现实的博弈,厂商大肆宣传自动驾驶致司机陷入危险
- C语言习题:输入10个学生5门课的成绩,分别用函数实现下列功能:①计算每个学生的平均分;②计算每门课的平均分;③找出所有50个分数中最高的分数所对应的学生和课程;④计算平均分方差;
- android照片涂抹功能,android照片涂画功能实现过程及原理
- 4种SpringBoot 接口幂等性的实现方案!最后一个80%以上的开发会踩坑
- 曾经学舞度芳年(代序)
- CP-ABE方案形式化定义及安全模型总结