python面向对象
时间:2022-01-18 作者:jiuyou-emperor
一、类和对象
1、万物皆对象
2、对象:用来描述客观事物的一个实体,由一组属性和方法构成
3、属性:对象具有的各种特征,每个对象的每个属性都有特定值
4、方法:对象执行的操作
5、类:对象的分类,分类就是认识对象的过程
面向对象设计的规则 |
---|
1、图书类: 属性:图书编号、书名、书的作者、上架日期、借出状态 功能(方法):借出和归还 |
2、银行卡类: 属性:卡号、银行卡名称、密码、姓名、余额 方法:登入、存款、取款 |
二、面向对象创建:定义某个类的对象具有的属性(变量)和方法(函数)
# 思路: # 定义类 --> 人类 # 编写类的属性:姓名、年龄、id(身份证号)、手机号 # 编写类的方法:吃、喝、玩、睡、上班 class Person: # 编写属性(变量) name = "杨幂" age = 30 gender = \'女\' # 我不想用指定属性,我想自己创建姓名 def set_param(self, name): # age、gender一样操作 域名 = name print(f\'姓名:{域名}\') # 如属性很多,那就很麻烦,我们可以使用 def __init__()去构造 # 编写方法(函数),无参 def eat(self): print(\'eating\') def drink(self): print(\'drinking\') def play(self): print(\'playing\') def sleep(self): print(\'sleeping\') @classmethod def work(self): print(\'working\') # 对象的构造 YM = Person() # 调用方法 域名p() 域名() zs = Person() 域名param(\'张三\') # 类访问方法,需要添加一个装饰器@classmethod 域名()
# def __init__() 去构造属性 class Person: def __init__(self, name, age, gender): 域名 = name 域名 = age 域名er = gender # 编写方法(函数),有参 def eat(self, food): print(f\'{域名}在吃{food}\') def drink(self, sthing): print(f\'{域名}在喝{sthing}\') def play(self): print(f\'{域名}在玩\') def sleep(self): print(f\'{域名}在睡觉\') def work(self): print(f\'{域名}正在工作\') def info(self): # 输出信息 print("该人的信息:", 域名, 域名, 域名er) # 构造对象输出信息 lihaoran = Person(name=\'李浩然\', age=32, gender=\'男\') # 调用方法 域名() 域名() 域名p()
三、面向对象思想:封装、继承、多态
1、封装(属性私有化)
- 私有属性可以被查看,但是不能被修改 ---> get方法
- 私有属性不被外界查看,但可以被外界修改 ---> set方法】
"""封装(属性私有化)""" class Student: def __init__(self, name, age, xh, id, address): 域名 = name # 默认公共属性(允许外界读取+修改) 域名 = age # 默认公共属性(允许外界读取+修改) 域名 = xh 域名 = id # 私有属性(不允许外界读取+修改) 域名dress = address # 私有属性(不允许外界读取+修改) # 私有属性可以被查看,但是不能被修改 ---> get方法 def getid(self): return 域名 def setaddress(self, newadress): 域名dress = newadress def info(self): print(\'学生的基本信息:\', 域名, 域名, 域名, 域名, 域名dress) zhangsan = Student(\'Tom\', 18, \'001\', \'340104555555555555\', \'南京\') # 私有属性(不允许外界读取+修改),如果想查看get方法 # print(域名) # 没有getid-->报错AttributeError: \'Student\' object has no attribute \'id\' read_student_id = 域名d() print(f\'查看张三id:{read_student_id}\') 域名() 域名ddress("合肥") 域名()
2、继承、多态
- 继承在父类基础上构造出新的类,子类可以拥有继承**父类的属性和方法
- 多态:指一个对象可以用子类的特点也可以父类的特征
class Animal: def __init__(self, name, color): 域名 = name 域名r = color def eat(self, food): print(f\'{域名}在吃{food}\') def drink(self, sthing): print(f\'{域名}在喝{sthing}\') def play(self): print(f\'{域名}在玩\') def sleep(self): print(f\'{域名}在睡觉\') # 继承 class Dog(Animal): def __init__(self, name, color, age): super().__init__(name, color) # super()调用父类对象 域名 = age # 属性有个性(构造属性重写) def kaijia(self): print(f"{域名}看家") hashiqi = Dog(\'哈士奇\', \'黑白\', 6) 域名(\'骨头\') # 多态 方法上个性(构造方法重写) 独特个性 域名ia() class Cat(Animal): def __init__(self, name, color): super().__init__(name, color) # super()调用父类对象 cat = Cat(\'波斯猫\', \'red\') 域名(\'鱼\') # 域名ia() 因为猫不会看家,这是狗的独特个性