面向对象笔记
-
类和对象
-
定义类
用代码描述清楚这个类是拥有哪些相同功能哪些相同属性的对象的集合。
功能:就是函数
属性:本质是保存数据的变量语法:
class 类名:
类的说明文档
类的内容
说明:
class——关键字
类名——自定义(标识符,不是关键字,见名知义,驼峰命名(多个单词之间首字母大写),首字母大写)
:——固定写法
类的说明文档——本质就是多行注释
类的内容——包含属性和方法(就是函数)
属性:类属性、对象属性
方法:对象方法、类方法、静态方法
注:方法就是定义在类中的函数
class Student: """ 创建学生类的对象 """ pass
-
定义对象(创建对象)
-
语法:类()
stu1 = Student() stu2 = Student() print(stu1, stu2) # <__main__.Student object at 0x0000000002586F10> # <__main__.Student object at 0x0000000002586F40>
-
-
-
对象方法
-
方法
定义在类中的函数就是方法
-
对象方法
怎么定义:直接定义在类中的函数
怎么调用:用对象来调用函数——对象.函数名()
特点:自带参数self,在调用的时候self不用传参,系统会自动将当前对象传给self(谁调用self就传谁)
class Person: """ 人类 """ def sleep(self): print(self) print('睡觉Zzz') person1 = Person() # 创建对象 print(person1) # # <__main__.Person object at 0x0000000002509400> person1.sleep() # <__main__.Person object at 0x0000000001DC9400> # 睡觉Zzz
-
-
构造方法和初始话方法
-
构造方法
函数名和类名相同,并且是用来创建对象的方法就是构造函数
python的构造函数在创建类的时候由系统自动创造,只需要在创建对象时自动调用
class Dog: pass # 系统自动定义 # def Dog(): # pass dog1 = Dog()
-
初始化方法: init
-
定义类的时候,可以根据需求在类中添加对象方法:init,添加的时候要保证函数名是__init__,第一个参数是self
除此以外,我们可以随意添加参数和函数体 -
当使用类创建对象时,系统会自动调用这个类中的__init__方法
-
调用构造方法创建对象的时候需不需要参数,需要几个参数看这个类的__init__方法除了self以外有没有额外的参数
-
魔法方法:类中方法名由__开头并且以__结尾的方法就是魔法方法,所有的魔法方法都是自动调用的。
class Dog: def __init__(self): print('__init__被调用') dog2 = Dog() # __init__被调用
class Dog:
新建好的对象 = 创建对象并且申请内存保存对象
新建好的对象.init()
return 新建好的对象 -
-
补充
def __init__(x, y): print('Cat__init__被调用') # Cat__init__被调用 print(f'x:{x}, y:{y}') # x:10, y:200 def Cat(*args, **kwargs): __init__(*args, **kwargs) c1 = Cat(10, 200) # *可以解包列表和元组 # **可以解包字典
-
-
属性
-
属性
属性是用来类的数据特征。属性的本质是保存数据的变量
-
对象属性和类属性
-
类属性
怎么定义:直接定义在类中的变量就是类属性
怎么使用:通过类来使用,格式: 类.属性
什么时候使用:属性值不会因为对象不同而不一样
class Person: # num就是类属性 num = 63 print(Person.num) # 63
-
对象属性
怎么定义:以’self.属性名 = 值’ 的形式定义在__init__方法中
怎么使用:通过对象来使用,对象.对象属性,例如:self.name, self.age, self.gender
什么时候使用:属性值会因为对象的不同而不一样
class Person: def __init__(self): self.name = '小明' self.age = 18 self.gender = '男' p1 = Person() print(p1.name, p1.age, p1.gender) # 小明 18 男 # 修改对象属性 p1.name = '小红' print(p1.name, p1.age, p1.gender) # 小红 18 男
-
对象属性赋初值的三种方法
- 赋固定值
- 使用没有默认值的参数赋值
- 使用有默认值的参数赋值
class Dog: def __init__(self, name, color, breed = '田园犬', gender ='公'): self.breed = breed self.name = name self.gender = gender self.color = color self.age = 1 # 赋固定值 # __repr__方法在当前类的对象被打印的时候会被自动调用,这个方法的返回值(必须是字符串)是什么就打印什么 # 定制打印方式 def __repr__(self): # 打印谁,self就是谁 return f'<{str(self.__dict__)[1:-1]}>' # self.__dict__——将self类型转换为字典 dog1 = Dog('旺财', '黄色') print(f'dog1:{dog1}') # dog1:<'breed': '田园犬', 'name': '旺财', 'gender': '公', 'color': '黄色', 'age': 1> dog2 = Dog('花花', '白色', '母') print(f'dog2{dog2}') # dog2<'breed': '母', 'name': '花花', 'gender': '公', 'color': '白色', 'age': 1> dog3 = Dog('旺财', '黄色') print(dog3) # <'breed': '田园犬', 'name': '旺财', 'gender': '公', 'color': '黄色', 'age': 1>
-
-
-
方法
-
对象方法
怎么定义:直接在类中定义函数(函数前不加装饰器)
怎么调用:对象.对象方法()
特点:自带参数self, self不用传参,谁调用self就指向谁
什么时候使用:如果实现函数的功能需要用到对象属性,一定是对象方法class Test: # 对象方法 def func1(self): print('对象方法') # 创建对象 t1 = Test() # 调用对象方法 t1.func1() # 对象方法
-
类方法
怎么定义:在定义函数前加装饰器@classmethod
怎么调用:类.类方法()
特点:自带参数cls,cls不用传参,系统将当前类传给cls(谁用就指向谁)
什么时候使用:实现函数的功能,在不需要对象属性的时候需要类就使用类方法class Test: # 类方法 @classmethod def func2(cls) # cls = Test print('类方法') # 调用类方法 Test.func2() # 类方法
-
静态方法
怎么定义:在函数前加装饰器@staticmethod
怎么调用:类.静态方法
特点:没有默认参数
什么时候使用:实现函数的功能,既不需要当前类的对象,也不需要当前类,就是用静态方法class Test: def func3(): # 静态方法 print('静态方法') # 调用静态方法 Test.func3()
-