数据分析
python
基础学习
一、类(class)
1. 基础
1.1 定义:
- 类是某一批对象的抽象,可以理解成某种概念。
- 例如:str/list/dict/tuple均为一个类。
1.2 语法:
- class 类名:
执行语句…
零个到多个类变量…
零个到多个方法…
1.3 成员:
- 类变量、实例变量、方法;
如果不定义任何类变量和方法,这个类就相当于空类,可以使用pass语句作为占位符;
成员之间定义顺序没有任何影响,可以相互调用;
class Empty:
pass
2. 类变量、实例变量
class Person():
name = "xiaoming"
age = 25
#Person.name即为类变量
a = Person() #类的实例化,a即为一个对象
a.gender = "male"
#a.gender即为实例变量
#encoding:utf-8
class TestClass(object):
classval1 = 100 #类变量
def __init__(self):
self.memval2 = 200 #实例变量
self.memfuntion2(600) #调用成员方法
def memfuntion1(self,val = 400):
localval3 = 300 #函数内部的局部变量
self.nmval4 = val
self.nmval5=500
def memfuntion2(self,val = 600):
self.memval6 = val #实例变量
self.memval7=700 #实例变量
if __name__ == '__main__':
inst = TestClass()
print(TestClass.classval1) #100
#print(TestClass.memval2 #不能运行,类名不要调用实例变量
print(inst.classval1) #100,(因为实例化,所以也可以用对象名调用类变量)
print(inst.memval2) #200
#print(inst.localval3) #不能运行,变量未在init初始化
#print(inst.nmval4) #不能运行,变量未在init初始化
#print(inst.nmval5) #不能运行,变量未在init初始化
print(inst.memval6) #600,已在init初始化
print(inst.memval7) #700,已在init初始化
2.1 类变量
定义:
- 属于类本身,用于定义该类本身定义的属性,不会用于记录具体对象的特征;
- 在类体中定义;
调用:
- 可以由类名直接调用,也可以由对象名来调用;
- 类的所以实例对象都可以访问类变量;
修改:
- 类变量只能由类修改,实例对象只有读权限;
class TestDemo():
age = 20
name = "xiaoming"
def __init__(self):
self.instance = 1
testinst1 = TestDemo() #类的实例化
TestDemo.age = 21 #通过类修改类属性
testinst1.name = "hongxiao" #通过对象“修改”(增加)属性
testinst2 = TestDemo() #新的实例
print(testinst1.name) #hongxiao ,对象1新增name=“hongxiao”属性
print(testinst2.age) #21,对象2的age属性已通过类修改
print(testinst2.name) #xiaoming , 对象2的name属性不变
2.2 实例变量
定义:
- 在类的构造函数内以self.开头来定义(或在构造函数中初始化)
- 各实例变量之间不影响
调用:
- 可以由类的对象来调用
- 类名不能调用实例变量
修改:
- 使用对象名.类变量名 = new_value ;
- 实例变量由实例对象修改,类修改实例变量没意义
class Demo:
# 类变量
classVar = 0
def __init__(self):
# 实例变量
self.instanceVar = 1
if __name__ == '__main__':
print(demo1.instanceVar) # 1
print(demo2.instanceVar) # 1
# 各实例对象间的实例变量互相不影响
demo1.instanceVar = 2
print(demo1.instanceVar) # 2
print(demo2.instanceVar) # 1
# 用类修改实例变量没意义
Demo.instanceVar = 2
print(demo1.instanceVar) # 2
print(demo2.instanceVar) # 1
方法
类继承
if name == main
3. 方法:
5.1 定义:
用于定义该类对象的行为或功能实现;
在类中定义的方法默认是实例方法,定义实例方法与定义函数基本相同;
实例方法的第一个参数会被绑定到方法的调用者(该类的实例);
实例方法至少应该定义一个参数,该参数通常会被命名为self。
5.2 方法与函数的区别:
函数:
区别:不属于某个类的函数叫函数
调用:函数采用func(x)形式调用
归纳:与类和实例无绑定关系的function都属于函数
def fun():
pass
print fun
#结果:<function fun at 0x00000000022BC3C8>
方法:
区别:属于某各类的函数交方法
调用:方法采用对象a.func(x)形式调用,方法仅作用与前导的对象。
归纳:与类和实例有绑定关系的function都属于方法
class Apple():
def fun1(self):
return "normal"
@staticmethod
def fun2():
return "staticmethod"
@classmethod
def fun3(cls):
return "classmethod"
print(Apple.fun1) #结果:<unbound method Apple.fun1>
print(Apple.fun2) #结果:<function fun2 at 0x00000000021DC4A8>
print(Apple.fun3) #结果:<bound method classobj.fun3 of <class __main__.Apple at 0x0000000001D8C768>>
5.3 构造方法:
在实例方法中有一个特别的方法:_ init _,这个方法被称为构造方法。
构造方法用于构造该类的对象,Python 通过调用构造方法返回该类的对象(无须使用 new)。
6. 类的作用:
定义变量;
创建对象;
派生子类;