10-python面向对象的编程(OOP)
2021/8/4 14:06:55
本文主要是介绍10-python面向对象的编程(OOP),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Python面向对象的编程
- 面向对象的程序设计(Onject-oriented programming,OOP)
- 面向过程的程序设计(Process-oriented programming,POP)
1. 1 对象(Object):将属性和方法封装在一起
1.2 类(class):具有相同的属性和方法的对象集合。
- 对象是类的实例。
- 子类继承了父类的全部属性和方法,并且也有自己特有的属性和方法。
- 继承描述了类之间的层次关系。
- 类和对象并非仅限于具体的事物,它也可以是一种抽象的概念或者规则。
1.3 类属性
- 类属性是类中所有对象共同拥有的属性
- 它在内存中只存在一个副本
- 可以通过类名访问,也可以被类的所有对象访问
- 在类定义之后,可以通过类名添加类属性,新增的类属性也被类和所有对象共有。
1.4 声明类
-
方法中必须有一个参数self,而且它是参数列表中的第一个参数
-
由同一个类可以生成很多个对象,每一个对象,都有一个专属的self,代表这个对象自身
class Person(): money=10086 def say_hello(self): print("hello!")
1.5 创建对象
对象名 = 类名()
class Person(): money=200000000 def say_good(self): print("Good Luck!") xiaoxu = Person() print(xiaoxu.money) xiaoxu.say_good()
运行结果:
PS G:\Codes\PyStudy> python -u "g:\Codes\PyStudy\02\Person.py" 200000000 Good Luck!
- 创建对象之后,动态添加对象属性
class Person(): money=200000000 def say_good(self): print("Good Luck!") xiaoxu = Person() #创建对象之后,动态添加对象属性 xiaoxu.major="computer" print("xiaoxu’s major is",xiaoxu.major)
运行结果:
PS G:\Codes\PyStudy> python -u "g:\Codes\PyStudy\02\Person2.py" xiaoxu’s major is computer
该动态添加的实例属性,它只属于xiaoxu自己,如果重新创建其他的Person()对象,是没有这个属性的。
例如在以上的代码前提下,在末尾添加上这两行代码再次进行测试:
laowang = Person() print(laowang.major)
运行结果:
PS G:\Codes\PyStudy> python -u "g:\Codes\PyStudy\02\Person3.py" xiaoxu’s major is computer Traceback (most recent call last): File "g:\Codes\PyStudy\02\Person3.py", line 17, in <module> print(laowang.major) AttributeError: 'Person' object has no attribute 'major'
1.6 测试类属性特性
- 类属性,所有的实例共同享有
- 修改类属性,所有实例的值都会发生变化
- 某一对象,自行修改类属性,那么其他对象无法获取该类属性的值
class Person(): # 类属性,所有的示例共同享有 money=200000000 def say_good(self): print("Good Luck!") xiaoxu = Person() laowang = Person() print(Person.money) print(xiaoxu.money) print(laowang.money) print("------------分割线-------------") # 修改类属性,所有实例的值都会发生变化 Person.money=400000 print(Person.money) print(xiaoxu.money) print(laowang.money) print("------------分割线-------------") # 小徐自行创建的实例属性,它就不会被共享 xiaoxu.money=1200000 print(Person.money) print(xiaoxu.money) print(laowang.money)
1.7 删除对象
del 对象名
- 在执行完这条语句后,该对象就不存在了,如果再访问该对象,就会出现错误提示
class Person(): money=1200000 def say_good(self): print("Good Luck!") xiaoxu = Person() xiaoxu.major="computer" print("xiaoxu’s major is",xiaoxu.major) del xiaoxu print(xiaoxu.major)
执行结果:
PS G:\Codes\PyStudy> python -u "g:\Codes\PyStudy\02\Person5.py" xiaoxu’s major is computer Traceback (most recent call last): File "g:\Codes\PyStudy\02\Person5.py", line 11, in <module> print(xiaoxu.major) NameError: name 'xiaoxu' is not defined
1.8 构造函数和析构函数
- 构造函数:再创建对象时,用来完成初始化操作
- init(self,参数2,参数3,…)
- 当创建对象时,系统会自动调用构造函数。
- 可以把对成员变量赋初值的语句写在构造函数中,从而保证每个变量都有合适的初始值。
- 析构函数:在清除对象时,回收和释放对象所占用的资源。
- del()
- 在Python中,构造函数和析构函数可省略
class Person: # 构造函数 -- __init__() # 在创建对象时,用来完成初始化操作 def __init__(self,name,age,gender="男"): self.name=name self.age=age self.gender=gender # 析构函数 -- __del__() # 在清除对象时,回收和释放对象所占用的资源 def __del__(self): print("Bye bye - from",self.name) def printInfo(self): print("姓名:",self.name,"年龄:",self.age,"性别:",self.gender) xiaoxu=Person("小徐",21) xiaofang=Person("小芳",18,"女") xiaoxu.printInfo() xiaofang.printInfo() del xiaoxu del xiaofang
运行结果:
PS G:\Codes\PyStudy> python -u "g:\Codes\PyStudy\02\Person6.py" 姓名: 小徐 年龄: 21 性别: 男 姓名: 小芳 年龄: 18 性别: 女 Bye bye - from 小徐 Bye bye - from 小芳
1.9 静态方法和类方法
""" 类方法: 可以通过类名或对象名调用。 不能访问实例属性,但可以访问类属性。 静态方法: 可以通过类名或对象名调用。 不能访问实例属性,也不能直接访问类属性。 但是可以通过类名引用类属性。 """ class Person(): @classmethod def eat(self,name): self.name = name print("吃了两碗米饭的",self.name) @staticmethod def drink(): print("一口气喝了1.5升的有点甜") laowang = Person() laowang.eat("我") laowang.drink()
运行结果:
PS G:\Codes\PyStudy> python -u "g:\Codes\PyStudy\02\Person7.py" 吃了两碗米饭的 我 一口气喝了1.5升的有点甜
1.10 公有变量和私有变量
1.11 继承(inheritance)
- 子类能够继承父类中所有非私有的成员变量和成员函数。
class Person(): money=10086 def say_hello(self): print("hello!") # 继承 - Teacher是Person的子类 # 子类能够继承父类中所有非私有的成员变量和成员函数 class Teacher(Person): pass amy = Teacher() print(amy.money) amy.say_hello()
运行结果:
PS G:\Codes\PyStudy> python -u "g:\Codes\PyStudy\02\tempCodeRunnerFile.py" 10086 hello!
这篇关于10-python面向对象的编程(OOP)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-27Python编程基础教程
- 2024-12-27Python编程基础指南
- 2024-12-24Python编程入门指南
- 2024-12-24Python编程基础入门
- 2024-12-24Python编程基础:变量与数据类型
- 2024-12-23使用python部署一个usdt合约,部署自己的usdt稳定币
- 2024-12-20Python编程入门指南
- 2024-12-20Python编程基础与进阶
- 2024-12-19Python基础编程教程
- 2024-12-19python 文件的后缀名是什么 怎么运行一个python文件?-icode9专业技术文章分享