Python 类的定义与使用

2019-9-6Python类的定义与使用

  • 类:描述具有相同属性和方法的对象的集合
  • 类变量:在整个实例化的对象中是公用的,类变量定义在类中且在函数体之外,类变量通常不作为实例变量使用
  • 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的
  • 覆盖(override),也称为方法的重写
  • 局部变量:定义在方法中的变量,只作用于当前实例的类
  • 实例变量:在类的声明中,属性是用变量来表示的,是在类声明的内部但是在类的其他成员方法之外声明的
  • 继承:即一个派生类继承基类的字段和方法
  • 实例化:创建一个类的实例,类的具体对象
  • 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法

1、类的定义
语法:

class <类名称>:
  ["文件字符串"] #类文档字符串
<语句> #类体,由类成员、方法、数据属性组成
class Car(object):  #定义一个类,派生自object类
  def infor(self): #定义成员方法
      print("This is a car")

2、构造方法

  • 类的构造方法或初始化方法,当创建了这个类的实例时就会调用该方法
  • 实例化对象时时可以传入参数的,这些参数会自动传入_ init _()方法中,可以通过重写这个方法来定义对象的初始化操作
  • 定义构造方法时,self是必要的参数且为第一个参数
  • 若在Python中定义类时没有定义_init_()方法,则在实例化时系统会自动调用默认的构造方法(无参的_init_()方法)
  • 一个类中可以定义多个构造方法,但是实例化类时只会实例化最后的构造方法,即后面的构造方法会覆盖前面的构造方法,并且需要根据最后一个构造方法的形式进行实例化(参数与最后一个构造方法的参数一致),因此一个类中最好只定义一个构造方法
  • 初始化实例包括:定义和初始化实例属性或调用类的一些方法
    语法:
def_init_(self):
  <语句>
class Myclass:
   i=612
   def __init__(self,you):
      self.you=you
   def func(self,me):
      self.me=me
      return self.me+" like "+self.you
user=Myclass("lion") 
print("调用类的属性:",user.i) 
print("调用类的方法:",user.func("monkey"))

调用类的属性:612
调用类的方法:monkey like lion

分析这段代码,一开始看着有点打脑壳,跟Java面向对象类的定义存在很多不一样。在定义类中函数时,通常需要将函数的第一个参数定义成self,而self指向对象本身。下面一个例子

class Breakfast:
  def set_name(self,name):
    self.name=name
  def get_name(self):
    return self.name
a=Breakfast()
b=Breakfast()
a.set_name("milk")
b.set_name("bread")
print(a.get_name())
print(b.get_name())

milk
bread

对象a,b在分别调用set_name()和get_name()方法时,self分别指向了a,b,即对象自身。

3、内置类属性
①_dict_:类的属性(包含一个字典,由类的数据属性组成)
②_doc_:类的文档字符串
③_name_:类名
④_module_:类定义所在的模块(类的全名称是’_ main _.className’,如果类位于一个导入模块mymod中,那么className._module _等于mymod)
⑤_bases _:类的所有父类构成元素(包含了由父类组成的元组)

4、类的实例
①创建类实例

car = Car() #实例化对象
car.infor() #调用对象的成员方法
//这里输出:This is a car

②内置函数isinstance()
作用:测试一个对象是否为某个类的实例

>>>isinstance(car,Car)
True

③内置函数type()
作用:查看对象类型

>>>type(car)

你可能感兴趣的:(Python 类的定义与使用)