Python的学习-9-面向对象
面向对象编程
面向对象 编程将数据和操作数据相关的方法封装到对象中,组织代码和数据的方式更接近人的思维。
Python完全采用了面向对象的思想,是真正面向对象的编程语言,完全支持面向对象的基本功能,例如:继承,多态,封装等。
注:Python支持面向过程,面向对象,函数式编程等多种编程方式。
类的定义
类可以看作是一切实体的抽象,而某个具体对象(实例)则是该抽象的实体化。
类的创建和使用
class Dog():
def __init__(self,name,age):
"""初始化属性name和age"""
self.name = name
self.age = age
def sit(self):
print(self.name.title()+" is now sitting.")
def roll_over(self):
print(self.name.title()+" is now rolling.")
my_dog = Dog('rain',19)
my_dog.sit()
my_dog.roll_over()
my_dog.kind = "金毛"#如果要操作的变量在初始化的时候不存在,那么就会在实例对象的对象区域中添加新变量
print(my_dog.kind)
- 方法__init__()。这是一个特殊的方法,当我们根据类创建新实例的时候,Python会自动运行这个方法的内容。(可以理解为java中的构造函数)
- self的意义:在__init__()中,形参self必不可少且必须位于参数列表的第一个。为什么必须在方法定义中包含self呢?Python在调用__init__()方法来创建实例的时候,将自动传入实参self。每个与类相关联的方法调用都自动传递实参self,它指向实例本身的引用,让实例能够访问类中的属性和方法。
- 例子中定义的两个方法都有前缀self。以self为前缀的变量都可供类中的所有方法使用,也可以通过类的任何实例来访问这些变量。self.name = name获取存储在形参name中的值,并将其存储到变量name中,然后该变量被关联到当前创建的实例。
实例属性
实例属性是从属于实例对象的属性,也称为“实例变量”。
- 实例属性一般在__init__()方法中通过如下代码定义:
self.实例属性名 = 初始值 - 在本类的其他实例方法中,也是通过self进行访问实例变量
self.实例属性名 - 创建实例对象后,通过实例对象访问该实例的变量:
obj01 = 类名() #创建对象,init()初始化属性
obj01.实例属性名 = 值
实例方法
实例犯法是从属于实例对象的方法。
实例方法的定义格式如下:
def 方法名(self,形参列表):
"""函数体"""
方法的调用格式: 对象.方法名(实参列表)
要点:
- 定义实例方法时,第一个参数必须为self
- 调用实例方法时,不需要也不能给self传参。self由解释器自动传参。
函数和方法的区别:
- 都是用于完成一个功能的语句块,本质一样
- 方法调用时,通过对象来调用。方法从属于特定实例对象。
- 直观上,方法定义时需要传递self,函数不需要
方法调用的本质
其他操作
- dir(obj)可以获得对象的所有属性,方法
- obj.dict 对象的属性字典
- pass 空语句
- isinstance(对象,类型) 判断对象是不是指定类型
类对象
当解释器执行class语句时,会创建一个类对象。
class Student:
pass
print(type(Student))
print(id(Student))
stu = Student
s1 = stu()#创建实例对象
print(s1)
实际上生成了一个变量名就是类名"Student"的对象。我们通过赋值把新变量名stu指向类名"Studeng",这时候通过Student和stu创建的对象具有相同效果。
类属性
类属性就是从属于“类对象”的属性,也成为“类变量”。类属性从属于类对象,可以被所有实例对象共享。
类属性在python执行class语句之后创建类对象就同时完成初始化,而实例属性需要在创建实例时才完成初始化。
类属性的定义方式:
class 类名 :
类变量名 = 初始值 #类变量名必须放在__init__()初始化方法之前
在类中或者类的外卖呢,我么你可以通过:“类名.类变量名”来读写,实例可以直接“实例名.类变量名”来读写。
class Student:
school = "University" # 类属性
count = 0 # 类属性