类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。类是一个模板,它描述一类对象的状态和行为,把这个模板实现以后,就是一个对象
类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
数据成员:类变量或者实例变量, 用于处理类及其实例对象的相关的数据。
方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
局部变量:定义在方法中的变量,只作用于当前实例的类。
实例变量:在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。
继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。
实例化:创建一个类的实例,类的具体对象。
方法:类中定义的函数。
对象:对象是类的一个实例,有状态和行为。对象包括两个数据成员(类变量和实例变量)和方法。
python主方法入口:if name == 'main':
Python3中的object为所有类的基类,所有类在创建时默认继承object,所以不声明继承object也可以,如:class className(object): 与 class className():
类下面方法的创建同样适用关键字def,唯一不同的是,方法的第一个参数必须是存在的,一般习惯命名为'self',但是在调用这个方法时不需要为这个参数传值.类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。
一般在创建类时会首先声明初始化方法init(),类似于java中的构造函数.init()方法是一种特殊的方法,当创建了这个类的实例时就会调用该方法
使用点号 . 来访问对象的属性,还可以添加,删除,修改类的属性
在调用基类的方法时,需要加上基类的类名前缀,且需要带上 self 参数变量。区别在于类中调用普通函数时并不需要带上 self 参数
类中函数体之外的变量叫类变量,它的值将在这个类的所有实例之间共享。你可以在内部类或外部类使用 类名.变量 访问。
如果在子类中需要父类的构造方法就需要显式地调用父类的构造方法,或者不重写父类的构造方法。
子类不重写 init,实例化子类时,会自动调用父类定义的 init。
如果重写了init 时,要继承父类的构造方法,可以使用 super 关键字:super(子类,self).init(参数1,参数2,....)还有一种经典写法:父类名称.init(self,参数1,参数2,...)
类定义的语法:
class 类名:
执行语句
类变量
类方法
类最重要的两部分就是类变量和类方法,类成员之间的可以相互调用。
程序可以在类中给新变量赋值就是增加类变量,可以通过del语句删除已有类的变量。
在init构造函数里面的是实例变量,程序可以任何位置(类里面或者类外面)增加实例变量,删除则用del语句。
在实例方法中有一个特别的方法 :init ,这个方法被称为构造方法 。 构造方法用于构造该类的对象, Python 通过调用构造方法返回该类的对象 。 python提供一个功能就是:若开发者没有定义构造函数,python会自动提供一个只包含self参数默认的构造方法。
class Bird:
eyes = "two"
def __init__(self, color,feet):
'为python对象增 '
self.color = color
self.feet = feet
def call(self,cd):
print("This bird:",cd)
上面的 Bird类定义了 一个构造方法,该构造方法只是方法名比较特殊:init ,该方法的第一个参数同样是 self,被绑定到构造方法初始化的对象 。和函数定义文档类似,类文档用字符串即可。该文档同样被放在类声明之后、类体之前。
下面是调用类的构造方法创建对象。第二行是调用实例方法。
xiaoniao= Bird("green","two")
xiaoniao.call("gezi")
#打印实例变量
print(xiaoniao.color,xiaoniao.feet)
#访问实例变量,对实例变量赋值
xiaoniao.color = "brown"
#增加实例变量
xiaoniao.skin = 'yellow'
#打印编辑后的实例变量
print(xiaoniao.color,xiaoniao.feet,xiaoniao.skin)
#调用实例方法call(),第一个参数仍是self,self代表实例本身,
#是自动绑定的,不需要再次输入,因此调用实例方法,只需再输入一个参数即可
xique.call("zhizhizhi")
同一个类的多个对象具有相同的特征,类用定义多个对象的相同特征。类不是一个具体的实体,对象才是一个具体的实体
class Person:
hair = 'black'
def __init__(self,name = "wang",age = 8):
'下面对Person对象增加两个实例变量'
self.name = name
self.age = age
'定义一个say()方法'
def say(self,content):
print(content)
给对象增加一个实例变量
# 增加一个skills实例变量
p.skills = ['programming','writing']
print(p.skills)
#删除p对象的name实例变量,而不是删除类中变量,新建一个对象,name实例变量还是构造函数默认的。
del p.name
# print(p.name) 会报错
给对象增加类方法
#动态增加方法
def info(self):
print("-----info函数-----",self)
print("动态增加方法")
return None
p.foo = info # foo实例方法名,info是我们在外面定义的方法,当然二者名字可以相同
'''方法增加,只用了变量名,后面并没有加括号方法动态增加,第一个参数并没有绑定给调
用类的对象,所以我们需要手动把第一个参数输入,第一个参数是实例本身,可用实例名代表'''
print(p.foo(p))
#如果想自动绑定,调用方法时,不想输入self参数,可以用type模块包装
#重新写一个函数
def message(self,comment):
print("我的个人信息是 %s " % comment)
return None
p2 = Person()
p2.message = message
from types import MethodType
p2.message = MethodType(p2.message,per)
#综上,整队某个对象动态增加的类变量和类方法,只能应用此对象,其他对象需重新增加
实例方法调用另一个实例方法
class Dog:
skin = "white"
def __init__(self,name = 'Aled'):
self.name = name
def jump(self):
print("执行jump方法")
def run(self):
self.jump() #此处不能写成jump()必须有self,通过调用实例对象的方法
print("调用run方法")
g = Dog()
g.run() #通过run()方法,调用了jump()方法