类的方法、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