面向对象是思想:
描述此思想的语法有:c++,java、python、swift、c#·····
思想和语言无关
两个概念:
类 class :描述对象的对象
对象(object)/实例(instance)
1 类的创建语法:
class 类名[(继承列表)]:
‘类文档字符串’
实例方法(类内部的函数method)定义
类变量(class variable) 定义
类方法(@classmethod)定义
静态方法(@staticmethod)定义
注:[ ]的内容可省略
2.类的作用:
可以用类来创建对象(实例)
类内定义的变量和方法能被此类所创建的所有实例共同拥有
类通常用来创建具有共同属性的对象(实例)
3 简单的类:
classDog:
pass
4 创建一个实例:
>>> class Dog:
... pass
...
>>> dog1 = Dog()
>>> dog1.kinds = '京巴'
>>> dog1.color = '白色'
>>> print(dog1.kinds,dog1.color)
京巴 白色
>>>dog2 = Dog()
>>> dog2.kinds = '藏獒'
>>> dog2.color = '棕色'
5实例创建表达式:
实例名 = 类名([创建传参])
作用:创建一个类的实例对象并返回实例
6 实例说明
实例有自己的作用域和名字空间,可以为实例添加属性
实例可以调用类中的方法
实例可以访问类中的类变量
7 实例变量
调用语法:
实例.变量名
在模块中调用:模块.实例.变量名
class Dog:
def infos(self): print('狗的种类:',self.kinds,'狗的颜色',self.color)
dog1 = Dog() dog1.kinds = '京巴' dog1.color= '白色' dog1.infos() 执行结果 狗的种类:京巴狗的颜色白色 |
8 实例变量赋值规则:
首次赋值则创建实例变量
再次赋值则改变实例变量的绑定关系
9 实例方法
9.1 语法:
class 类名(继承列表):
def实例方法名(self[,参数1,参数2······]):
‘文档字符串’
语句
9.2 说明:
实例方法的实质是函数,是定义在类内的函数
实例方法属于类的属性
实例方法是第一个参数代表调用这个实例方法的对象,一般命名为slef
实例方法如果没有return语句,则返回None
模块为Dog.py
class Dog: ''' 这是一只小动物,属于犬科''' def say(self): print("汪汪")
>>> dog1 = Dog.Dog()
汪汪 |
9.3 实例方法的调用方法:
实例.实例方法名(调用参数)
或
类名.实例方法名(实例,调用参数)
class Dog: ''' 这是一只小动物,属于犬科''' def say(self): print("汪汪") def eat(self,f): #好像通常是给实例添加属性 '为狗进食,同时记录food' print("狗正在吃",f) self.food = f #那个实例调用此方法,那个对象就会有这个属性 def food_info(self): print('小狗刚吃的是:',self.food)
dog1 = Dog() dog1.say() #对象.实例方法名(调用参数) Dog.say(dog1) #类.对象方法名(实例,调用参数) dog1.eat("骨头") print(dog1.food) dog1.food_info()
执行结果 >>> import Dog 汪汪 汪汪 狗正在吃骨头 骨头 小狗刚吃的是:骨头 >>> Dog.__doc__ >>> print(Dog.__doc__) None >>> Dog.Dog().__doc__ ' 这是一只小动物,属于犬科' >>> Dog.Dog().eat.__doc__ '为狗进食,同时记录food' |
补充构造方法
1 作用:
创建一个对象
2 函数名:
__new__
3 说明:
构造方法是较__init__之前执行,也就是说这个构造方法创建对象,并没有对创建对象进行初始化
10初始化方法
10.1作用
创建对象时初始化实例变量
10.2 语法
def __init__(self[,形参列表])
语句
10.3 说明
Ø 构造方法名必须为__init__不可改变
Ø 在一个类中,只能有一个__init__构造方法(有多个时,最后一个起作用)
Ø 构造方法会在实例创建时自动调用,且将实例自身通过第一个参数self传入__init__方法
Ø 构造方法如果没有return语句,则返回self自身