Python中的数据类型都是类,我们可以自定义类,即创建一种新的数据类型。
语法格式如下:
class类名[(父类)]
类体
定义小汽车car类的代码如下:
class Car(object):
#类体
pass
#pass语句只用于维持程序结构的完整,在编程时若不想马上编写某些代码,又不想有语法错误,可以使用pass语句占位。
小汽车car类继承了object类,object类是所有类的根类,在Python中任何一个类(除object外)都直接或间接地继承了object,直接继承object时(object)部分的代码可以省略。
1.创建对象
类相当于一个模板,依据这样的模板来创建对象,就是类的实例化,所以对象也被称为“实例”。
创建对象的示例代码如下:
car=Car()
car表示刚刚创建的一个小汽车对象
Car()表示创建一个小汽车对象,小括号表示调用构造方法,构造方法用于初始化对象。
2.类的成员
成员变量也被称为数据成员,保存了类或对象的数据。例如学生的姓名和学号。
构造方法是一种特殊的函数,用于初始化类的成员变量。
成员方法是在类中定义的函数。
属性的对类进行封装而提供的特殊方法。
其中:实例变量和实例方法属于对象,通过对象调用。而类变量和类方法属于类,通过类调用。
2.1实例变量
实例变量就是对象个体特有的“数据”。
class Dog:
def __init__(self,name,age):
self.name=name #创建和初始化实例变量name
self.age=age #创建和初始化实例变量age
d=Dog('火锅',5)
print('我们家狗狗名叫{0},{1}岁了.'.format(d.name,d.age))
#我们家狗狗名叫火锅,5岁了.
类中的self表示当前对象,构造方法中的self参数说明这个方法属于实例,self.age中的self表示age属于实例,即实例成员变量。
2.2构造方法
类中的__init__() 方法是一个非常特殊的方法, 用来创建和初始化实例变量, 这种方法就是“构造方法”。 在定义__init__() 方法时,它的第1个参数应该是self, 之后的参数用来初始化实例变量。 调用构造方法时不需要传入self参数。
示例代码如下:
class Dog:
def __init__(self,name,age,sex="雌性"):
self.name=name #创建和初始化实例变量name
self.age=age #创建和初始化实例变量age
self.sex=sex #创建和初始化实例变量sex
d1=Dog('球球',2)
d2=Dog('哈哈',3,'雄性')
d3=Dog(name='喜喜',age=1,sex='雄性')
print('我们家狗狗名叫{0},{1}岁了,是{2}.'.format(d1.name,d1.age,d1.sex))
print('我们家狗狗名叫{0},{1}岁了,是{2}.'.format(d2.name,d2.age,d2.sex))
print('我们家狗狗名叫{0},{1}岁了,是{2}.'.format(d3.name,d3.age,d3.sex))
运行结果如下:
2.3实例方法
实例方法与实例变量一样, 都是某个实例(或对象) 个体特有的方法。定义实例方法时,它的第1个参数也应该是self, 这会将当前实例与该方法绑定起来, 这也说明该方法属于实例。 在调用方法时不需要传入self, 类似于构造方法。
下面看一个定义实例方法的示例 :
class Dog:
#构造方法
def __init__(self,name,age,sex="雌性"):
self.name=name #创建和初始化实例变量name
self.age=age #创建和初始化实例变量age
self.sex=sex #创建和初始化实例变量sex
#实例方法
def run(self):
print("{0}在跑,{1}岁了".format(self.name,self.age))
#实例方法
def speak(self,sound):
print('{0}在叫,“{1}”!'.format(self.name,sound))
dog=Dog('球球',2)
dog.run()
dog.speak('旺 旺 旺')
#结果
#球球在跑,2岁了
#球球在叫,“旺 旺 旺”!
2.4类变量
类变量是属于类的变量,不属于单个对象。
示例代码:
class Account:
interest_rate=0.05
def __init__(self,owner,amount):
self.owner=owner
self.amount=amount
account=Account('Tony',80000000)
print('账户名:{0}'.format(account.owner))
print('账户金额:{0}'.format(account.amount))
print('利率:{0}'.format(Account.interest_rate))
#运行结果
#账户名:Tony
#账户金额:80000000
#利率:0.05
2.5类方法
类方法与类变量类似,属于类,不属于个体实例。在定义类方法时,它的第一个参数不是self,而是类本身。
定义类方法代码如下:
class Account:
interest_rate=0.0556
def __init__(self,owner,amount):
self.owner=owner
self.amount=amtount
#类方法
@classmethod
#定义类方法需要的装饰器,装饰器以@为开头修饰函数、方法和类,用来约束它们
def interest_by(cls,amt):
return cls.interest_rate*amt
#cls可以直接使用Account替换,所以cls.interest_rate可以被替换为Account.interest_rate
interest=Account.interest_by(120000)
print('计算利息:{0:4f}'.format(interest))
#输出结果:计算利息:6672.000000