面向对象的基本特征
1:封装
2:继承
3:多态
类的定义和使用
定义类
使用class关键字来实现
class ClassName:
"""类的帮助信息"""
statement #类体
举个实例
class Geese:
"""大雁类"""
pass #如果不知道写什么东西,就可以先pass
创建类的实例
就用上面的那个实例来举例
wildGeese = Geese() #创建大雁类的实例
print(wildGeese)
创建__init__()方法
创建类后,往常会再创建一个__init__()方法,这是一个特殊的方法,类似与Java中的构造方法.即每创建一个新实例,他会自动执行.init()方法中必须包含一个self参数,而且必须是第一个参数.self参数是一个指向实例本身的引用,用于访问类中的属性和方法,在方法被调用时会自动传递实际参数self.因此,在__init__()方法中只有一个参数的情况下,当创建类的实例时,就无需指定实际参数.
简单来说,这个方法在你创建实例的时候就会被自动执行,self就像一个路标,通往则这个方法,所以在使用这个类时,不用给他赋值,再有别的属性的的话就要赋值了
还是老样子,举例
class Geese:
"""大雁类"""
def __init__(self): #__init__()方法
print("我是大雁类") #方法中的内容
wildGeese = Geese() #创造实例时直接调用方法
这个太简单了,我们再来加点元素
class Geese:
"""大雁类"""
def __init__(self,beak,wing,claw):
print("我是大雁类")
print(beak)
print(wing)
print(claw)
beak_1 = "鸟喙长"
wing_1 = "翅膀也不短"
claw_1 = "爪子是蹼状"
wildGeese = Geese(beak_1,wing_1,claw_1) #self方法中不能缺元素
结果是
我是大雁类
鸟喙长
翅膀也不短
爪子是蹼状
但是一旦缺少元素,那么就会报错,如下
TypeError: __init__() missing 1 required positional argument: 'claw'
创建类的成员并访问
创建实例方法并访问
继续刚才那个例子
class Geese:
"""大雁类"""
def __init__(self,beak,wing,claw):
print("我是大雁类")
print(beak)
print(wing)
print(claw)
def fly(self,state):
print(state)
beak_1 = "鸟喙长"
wing_1 = "翅膀也不短"
claw_1 = "爪子是蹼状"
wildGeese = Geese(beak_1,wing_1,claw_1)
wildGeese.fly("100km")
从这里我们可以看出,init()方法是自动调用,但是要是你想要调用其他的方法就要使用 实例.方法名()了
创建数据成员并且访问他们
类属性
就是定义在类里面的变量,也就是属性,直接举个例子看一下
class Geese:
"""大雁类"""
neck = "脖子较长"
wing = "振翅频率较高"
leg = "腿位于身体的中心支点"
def __init__(self):
print("我属于雁类,我有以下特征:")
print(Geese.neck)
print(Geese.wing)
print(Geese.leg)
wildGeese = Geese()
结果
我属于雁类,我有以下特征:
脖子较长
振翅频率较高
腿位于身体的中心支点
我们可以看出,这个之间定义在类里面的"全局变量",在使用时的形式为
类名.属性名
实例属性
还要注意实例属性只能通过实例名访问
如果使用类名访问,会出异常
举例:
class Geese:
"""
雁类
"""
def __init__(self):
self.neck = "脖子长"
print(self.neck)
wildgeese = Geese()
print(Geese.neck)
就比如在上述代码后使用print(Geese.neck)
print(Geese.neck)
AttributeError: type object 'Geese' has no attribute 'neck'
但是可以修改,在你创建实例过后,你可以通过实例来修改它
class Geese:
"""
雁类
"""
def __init__(self):
self.neck = "脖子长"
print(self.neck)
wildgeese1 = Geese()
wildgeese2 = Geese()
wildgeese2.neck = "一般般吧"
print(wildgeese2.neck)
结果:
脖子长
脖子长
一般般吧
所以说要注意这个点