python---面向对象,class定义、构造函数、析构函数、基本继承

python—面向对象,class定义、构造函数、析构函数、基本继承

进阶课 面向对象

1.class的基本定义
2.构造,析构函数

注意:在class类里面函数的参数第一个值必须是self,意思是指向对象本身的

1.class的基本定义
>>> class test(object):
...     a = 1#a被称为test类的属性
...     def func1(self):#func1被称为test类的方法
...             pass
... 
>>> 
>>> t = test()#实例化
>>> print t.a#调用属性
1
>>> print t.func1()#调用方法
None
>>> 
# 我们所有的class都是object的派生类
2.构造,析构函数
1)构造函数(__init__称为class的构造函数与构造方法,一般做为t实例化设置初始值而存在的。即一般是为了初始化对象时将必须要用到的属性、方法做一些定义,而存在的)
>>> class test(object):
...     def __init__(self,arg1,arg2):#构造函数
...             self.arg1 = arg1#对arg1进行初始的赋值,因此把arg1引入到test类的内部中
...             self.arg2 = arg2#对arg2进行初始的赋值,因此把arg2引入到test类的内部中
...     def func2(self):
...             return self.arg1,self.arg2
... 
>>> t = test(11,55)#11,55会引入arg1与arg2中
>>> print t.func2()
(11, 55)
>>> 
# 我们所有的class都是object的派生类

析构函数(主要是销毁/删除临时的变量,主要对那些长期占用内存的临时变量销毁)
>>> class test(object):
...     def __init__(self,arg1,arg2):#构造函数
...             self.arg1 = arg1
...             self.arg2 = arg2
...     def func2(self):
...             return self.arg1,self.arg2
...     def __del__(self):#析构函数
...             del self.arg1
...             del self.arg2
... 
>>> t = test(11,55)
>>> print t.func2()
(11, 55)
>>> print t.__del__()#销毁/删除临时的变量
None
>>> print t.func2()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 6, in func2
AttributeError: 'test' object has no attribute 'arg1'
>>> 
# 我们所有的class都是object的派生类

3.面向对象编程,是面向对象,而不是面向类。

>>> class d():
...     def a():
...             pass
... 
>>> 

4.对于新手,一开始就进行类设计是傻傻的类设计。

python学习思路:
1)伪代码  小程序-->直接写流程 大项目--->先分析结构

5.有趣的面向对象。

1)继承
>>> class base(object):
...     def __init__(self,name):
...             self.name = name#加self会被全局调用
... 
>>> class b(base):#b类继承了base类的功能使用__init__方法
...     def get_name(self):
...             return self.name
... 
>>> new_class = b("lilei")
>>> print new_class.get_name()
lilei
>>> 

6.先实现,再优化,过早优化是万恶之源

7.kiss原则

### 构造函数析构函数的概念及作用 #### 什么是构造函数构造函数是一种特殊方法,在创建对象时自动调用。它主要用于初始化新创建的对象状态,例如分配内存、设置初始值等操作。不同编程语言对构造函数定义方式有所不同。 在 PHP 中,`__construct()` 方法被用来作为类的构造函数[^1]。当实例化一个类时,PHP 自动调用该方法来完成必要的初始化工作。如果未显式声明构造函数,则系统会提供一个默认的无参构造函数Python构造函数由 `__init__()` 定义[^3]。此方法会在每次创建类的新实例时执行,用于设定属性或其他初始化逻辑。如果没有手动编写构造函数,解释器同样会隐含地使用一个不带任何参数的默认构造函数。 对于 C++ 而言,构造函数可以是没有参数的形式或者接受特定数量和类型的输入变量[^2]。值得注意的是,默认情况下编译器能够生成一种称为“全缺省”的构造函数;然而一旦程序员提供了任何形式的构造函数之后,这种行为就会停止发生——即不再有隐式的默认版本可用除非特别指定。 #### 什么是析构函数析构函数是在对象生命周期结束前被执行的一段代码片段,通常负责清理资源的任务比如释放动态分配的空间或关闭文件句柄等等动作。每种支持面向对象特性的高级语言都有自己的实现细节: - **PHP**: 使用 `__destruct()` 来表示过程。这个方法将在脚本终止之前运行一次,并允许开发者在此期间处理诸如保存数据到数据库之类的最后事务。 - **Python**: 类似于其他OOP语言,这里也存在名为 `__del__()`, 这个魔术方法会在垃圾回收机制准备销毁某个实例之前触发[^4]^。不过需要注意一点就是由于 Python 基于引用计数加周期扫描相结合的方式来管理内存,因此确切何时调用 __del__ 并不是绝对确定的事情。 - **C++**: 对象离开其作用域时自动调用相应的 destructor 函数. 此外还有一点很重要那就是基类指针指向派生类对象删除的时候也会先调用子类再逐层向上直至最顶层父类全部完成各自的解流程. 以下是三种语言中关于如何定义以及简单使用的示范: ```php // PHP Example class MyClass { public function __construct() { echo 'Object has been created!'; } public function __destruct() { echo 'Destroying object'; } } $obj = new MyClass(); // Output: Object has been created! unset($obj); // Output: Destroying object ``` ```cpp // C++ Example #include <iostream> using namespace std; class MyClass { public: MyClass() { cout << "Constructor called\n"; } ~MyClass() { cout << "Destructor called\n"; } }; int main(){ MyClass obj; } /* Possible output: Constructor called Destructor called */ ``` ```python # Python Example class MyClass: def __init__(self): print('Instance Created') def __del__(self): print('Deleting Instance') my_instance = MyClass() # When the program ends or when my_instance goes out of scope, it will call del method. ``` ### 总结 无论是哪种主流开发工具所提供的功能特性里都可以看到造/这对搭档的身影。它们贯穿整个软件开发生命周期的不同阶段发挥着不可或缺的重要角色 —— 初期建框架结并赋予初态信息给新生实体;后期则妥善安排善后事宜保障整体系统的稳定性不受影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐为波

看着给就好了,学习写作有点累!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值