(Python第七天)类
一、定义类
所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)的概念。
以下面这种方式定义类:
class nameoftheclass(parent_class): statement1 statement2 statement3
在类的声明中可以写任何Python语句,包括定义函数
2)__init__方法
类的实例化使用函数符号,只要将类对象看作是一个返回新的类实例的无参数函数即可
x=MyClass() 该语句创建了一个新的类实例并将该对象赋给局部变量x,这个实例化操作创建了一个空的对象,很多类都倾向于将对象创建为有初始状态的,因此类会定义一个名为__init__()的特殊方法,如
def __init__(self): self.data=[]
类定义了__init__()方法的话,类的实例化操作会自动为新创建的类实例调用__init__()方法.
这个方法就是pyhton的构造方法,
3)继承
当一个类继承另一个类时,它将继承父类的所有功能(变量和方法)
实例:创建一个叫做person的类,然后创建两个派生类student和teacher,当两个类都从person类继承时,它们的类除了会有person类的所有方法还会有自身用途的新方法和新变量,
1 class Person(object): 2 """ 3 返回具有给定名称的 Person 对象 4 """ 5 6 def __init__(self, name): 7 self.name = name 8 9 def get_details(self): 10 """ 11 返回包含人名的字符串 12 """ 13 return self.name 14 15 16 class Student(Person): 17 """ 18 返回 Student 对象,采用 name, branch, year 3 个参数 19 """ 20 21 def __init__(self, name, branch, year): 22 Person.__init__(self, name) 23 self.branch = branch 24 self.year = year 25 26 def get_details(self): 27 """ 28 返回包含学生具体信息的字符串 29 """ 30 return "{} studies {} and is in {} year.".format(self.name, self.branch, self.year) 31 32 33 class Teacher(Person): 34 """ 35 返回 Teacher 对象,采用字符串列表作为参数 36 """ 37 def __init__(self, name, papers): 38 Person.__init__(self, name) 39 self.papers = papers 40 41 def get_details(self): 42 return "{} teaches {}".format(self.name, ','.join(self.papers)) 43 44 45 person1 = Person('Sachin') 46 student1 = Student('Kushal', 'CSE', 2005) 47 teacher1 = Teacher('Prashad', ['C', 'C++']) 48 49 print(person1.get_details()) 50 print(student1.get_details()) 51 print(teacher1.get_details())
在student和Teacher类中重写了Person类的get_details()方法,当我们调用student1和teacher1的get_details()方法时,使用的是各自类(Student和Teacher)中定义的方法
4)多继承
一个类可以继承自多个类,具有父类的所有变量和方法
5)删除对象
使用关键字del来删除对象
6)属性读取方法
直接使用属性可以
7)装饰器
想要更精确的调整控制属性访问权限,可以使用@property装饰器,@property装饰器就是负责把一个方法变成属性调用的
实例:确保没有人能设置金额为负,并且有个只读属性cny返回换算人民币后的金额
1 class Account(object): 2 """账号类, 3 amount 是美元金额. 4 """ 5 def __init__(self, rate): 6 self.__amt = 0 7 self.rate = rate 8 9 @property 10 def amount(self): 11 """账号余额(美元)""" 12 return self.__amt 13 14 @property 15 def cny(self): 16 """账号余额(人民币)""" 17 return self.__amt * self.rate 18 19 @amount.setter 20 def amount(self, value): 21 if value < 0: 22 print("Sorry, no negative amount in the account.") 23 return 24 self.__amt = value 25 26 if __name__ == '__main__': 27 acc = Account(rate=6.6) # 基于课程编写时的汇率 28 acc.amount = 20 29 print("Dollar amount:", acc.amount) 30 print("In CNY:", acc.cny) 31 acc.amount = -100 32 print("Dollar amount:", acc.amount)