Python类的方法、self的含义、类的初始化与析构

类的方法、self的含义、类的初始化与析构

类的方法

方法:就是类中定义的函数。
例如定义一个简单的Square的类

class Square(object):
    def area(edge_length):
        return 4*edge_length
    def volume(edge_length):
        return edge_length**3
#调用area方法计算面积
print(Square.area(4))
#调用volume方法计算体积
print(Square.volume(4))
16
64

类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
局部变量:定义在方法中的变量,只作用于当前实例的类。
实例变量:在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。
继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个man类型的对象派生自Person类。

#首先来看类类变量、局部变量、实例变量
class Person(object):
    name = 'Tom'  #name是类变量
    def __init__(self,weigh,sex):#__init__方法属于构造方法,该方法在类实例化时会自动调用,实质上就是给实例变量赋值
        self.weigh = weigh  #weigh,sex就是实例变量,self就是指实例本身
        self.sex = sex
    def age(self):
        age = 18  #age就是局部变量,只作用在age方法内
        return age
#实例化
Tom = Person('60kg','male')
print(Tom.age())
18

self的含义

self代表类的实例,而非类
类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。
self 不是 python 关键字,换成 example 也是可以正常执行的
class Complex(object):
    def __init__(example,real,imag):
        example.real = real
        example.imag = imag
        #返回实例a的位置,使用id函数查看实例在内存中的位置返回十进制数,用hex转为16进制显然与直接返回a的位置一致
        print(example,id(example),hex(id(example)))
        print(example.__class__)#这才是类
        print('生成的复数为{}+j{}'.format(real,imag))
a = Complex(1,2)
print(a,id(a),hex(id(a)))  #返回实例a的位置,使用id函数查看实例在内存中的位置返回十进制数,用hex转为16进制显然与直接返回a的位置一致
print(a.__class__)  #这才是类
<__main__.Complex object at 0x00000191EC61C8D0> 1726247717072 0x191ec61c8d0
<class '__main__.Complex'>
生成的复数为1+j2
<__main__.Complex object at 0x00000191EC61C8D0> 1726247717072 0x191ec61c8d0
<class '__main__.Complex'>

类的初始化与析构

__ init __方法属于构造方法,也叫作初始化,该方法在类实例化时会自动调用,实质上就是给实例变量赋值,例如下面构造一个复数类,生成复数

class Complex(object):
    def __init__(self,real,imag):
        self.real = real
        self.imag = imag
        print('生成的复数为{}+j{}'.format(real,imag))
a = Complex(1,2)
生成的复数为1+j2

类的析构

__del__”就是一个析构函数了,当使用del 删除对象时,会调用他本身的析构函数。提示开发者,对象被销毁了,方便调试。进行以写必要的清理工作。
class Complex(object):
    def __init__(self,real,imag):
        self.real = real
        self.imag = imag
        print('生成的复数为{}+j{}'.format(real,imag))
    def __del__(self):
        print('对象已销毁')
a = Complex(1,2)
print(id(a))
del a
print(id(a))#对象已经销毁空间已经释放所以提示 name a is not defined  a没有被定义
生成的复数为1+j2
1726246657888
对象已销毁
---------------------------------------------------------------------------

NameError                                 Traceback (most recent call last)

<ipython-input-45-dc52e2e7996f> in <module>
      9 print(id(a))
     10 del a
---> 11 print(id(a))
NameError: name 'a' is not defined
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值