admin管理员组文章数量:1794759
Lesson
1.init 魔法方法
- 在实例创建的时候就会直接调用
- init方法携带self以外的参数,那么创建实例的时候必须传入这个属性
class Person:# 当变量不存在的时候,要么导入,要么创建# 导入:import xxxx import random 导入时导入python存在的包或者你自己写的模块def __init__(self, name):# print('hello')self.name = name# self 就是实例对象def speak(self):print('大家好,我是%s' % self.name)# print(s)# def run(self):# __init__ 方法在实例创建的时候默认调用 类的初始化
p1 = Person('刘亦菲')
# p1.__init__()
# p1.name = '邱淑贞'
p2 = Person('邱淑贞')
# p2.name = '刘亦菲'
# p1.speak()
# p2.speak()
p3 = Person('关之琳') #创建变量
p3.speak()# 目前对于程序来说,没有name就会报错,是必须的
# name不相同,所以不能定义在类中
# 手动添加name属性没有提示容易遗忘# 当我们创建实例对象的时候,就给我们提示,你需要添加什么属性,不添加则不能创建示例对象
# __init__()方法
2.封装
- name
- 完全封装:__name
@property
def name(self): # getter方法 return self._name
@name.setter # setter方法 def name(self, name): self._name = name
# 封装: 为了保障数据的安全性和程序的正确性,我们要协定一个方式,来将参数保护起来
# 封装是一种思想,保护数据的可靠性的思想,而不是真正的不能够修改的数据 (防君子不防小人)# class Car():
#
# def __init__(self, name, color):
# # 属性名称 值
# self.name = name
# self.color = color
#
# def run(self):
# print('汽车开始跑了')
#
# def laba(self):
# print('滴滴滴')
#
#
# # car = Car('奔驰', '黑色')
# c = Car('大狼狗', '黑色')
#
# # print(car.name, car.color)
# # car.run()
# # car.laba()
#
# c.run()
# c.laba()# 封装是面向对象的三大特性之一 : 继承、多态# class Car():
#
# def __init__(self, name, color):
# # 属性名称 值
# # 这种方式告诉别人这个是私有属性,不要轻易修改
# self.hidden_name = name
# self.hidden_color = color
#
# def run(self):
# print('汽车开始跑了')
#
# def laba(self):
# print('滴滴滴')
#
#
# car = Car('奔驰', '黑色')
# # 语法: 对象.属性名 = 属性值 : 设置或者修改属性值
# car.hidden_name = '五菱宏光'
# car.name = '宝马' # 相当于重新创建了一个属性
# print(car.hidden_name)
# print(car.name)# class Car():
#
# def __init__(self, name, color):
# # 属性名称 值
# # 这种方式告诉别人这个是私有属性,不要轻易修改
# # __name 叫做完全封装 私有属性
# self.__name = name
# self.__color = color
#
# def run(self):
# print('汽车开始跑了')
#
# def laba(self):
# print('滴滴滴')
#
# # getter方法 setter方法
# # getter方法用查看私有属性 如果只有一个getter方法,没有setter方法:这个属性是一个只读属性
# def get_name(self):
# return self.__name
#
# # setter方法是用来修改私有属性
# def set_name(self, name):
# self.__name = name
#
#
# car = Car('奔驰', '黑色')
# # _类名__属性名 类名前面一个横杠,属性名前面两个横杠
# # print(car._Car__name)
# # car.__name = '雪佛兰' 这种方式是外行 没有工作经验的程序员
# print(car.get_name())
# # print(car.set_name('宝马'))
# print(car.get_name())class Car():def __init__(self, name, color):# 属性名称 值# 这种方式告诉别人这个是私有属性,不要轻易修改# _name 私有属性self._name = nameself._color = colordef run(self):print('汽车开始跑了')def laba(self):print('滴滴滴')# getter方法 setter方法# getter方法用查看私有属性 如果只有一个getter方法,没有setter方法:这个属性是一个只读属性def get_name(self):return self._name# setter方法是用来修改私有属性def set_name(self, name):self._name = namecar = Car('奔驰', '黑色')
# print(car._name) # 没有工作经验
print(car.get_name())
- getter方法和setter方法的property装饰器
class Person():def __init__(self, name):self._name = name# getter 方法# property装饰器@propertydef name(self):print('get 方法执行了')return self._name# setter方法的property装饰器的使用@name.setterdef name(self, name):print('set 方法执行了')self._name = namep1 = Person('邱淑贞')print(p1.name)
p1.name = '刘亦菲'
print(p1.name)
3.继承
- issubclass() 方法
- 用于判断参数 class 是否是类型参数 classinfo 的子类。
- 语法:issubclass(class, classinfo)
- 参数 calss—类 classinfo—类
- 返回值:如果 class 是 classinfo 的子类返回 True,否则返回 False。
class A:pass
class B(A):passprint(issubclass(B,A)) # 返回 True
- isinstance()
-
判断一个对象是否是一个已知的类型,类似 type()。
-
语法:isinstance(object, classinfo)
-
参数:object—对象 classinfo—可以是直接或间接类名、基本类型或者由它们组成的元组。
-
返回值:如果对象的类型与参数二的类型(classinfo)相同则返回 True,否则返回 False。
>>>a = 2 >>> isinstance (a,int) True >>> isinstance (a,str) False >>> isinstance (a,(str,int,list)) # 是元组中的一个返回True True
-
- isinstance() 与 type() 区别:
type() 不会认为子类是一种父类类型,不考虑继承关系。isinstance() 会认为子类是一种父类类型,考虑继承关系。如果要判断两个类型是否相同推荐使用 isinstance()。
- 简介
- 让类与类产生关系,拿到它里面的属性和方法
class Animal():def sleep(self):print('动物会睡觉')def run(self):print('动物会跑')# 定义一个狗类
# 1. 直接在动物类上面修改 违反ocp
# 2. 创建一个新的类(狗类) 会出现大量重复的代码
# 3. 直接从动物类中间拿到属性和方法 (推荐)=> 继承:就是在定义类名之后的括号里写上继承的父类(超类)class Dog(Animal):passdog = Dog()dog.run()
dog.sleep()# 检测是否是类创建的实例对象
# res = isinstance(dog, Dog)
# print(res)# 检测是否是当前类的父类 issubclass
# res = issubclass(Dog, Animal)
# print(res)# object 是所有类的父类
# res = issubclass(Animal, object)
# print(res)
- super():在继承的基础上,重写了父类的方法,现在又想调用父类的方法,所以用super()
class Animal(object):def __init__(self, name):self._name = namedef sleep(self):print('动物会睡觉')def run(self):print('动物会跑')def get_name(self):print('get 方法调用了')return self._nameclass Dog(object):def __init__(self, gender):self.gender = genderclass Zhonghua(Animal, Dog):def __init__(self, age, name, gender):super().__init__(gender)super().__init__(name)self.gender = genderself._name = nameself.age = agedef sleep(self):super().sleep()print('狗会睡觉')def run(self):print('狗会跑')dog = Zhonghua('中华田园犬', 18, '男')
dog.sleep()
# print(dog.get_name())print(type(Zhonghua))
print(issubclass(Zhonghua, type))
print(issubclass(type, object))
'''# 解耦合 1. 提高问题的解决概率 2. 提高问题的解决效率 3. 提高解决问题的速度 4. 降低爆发隐患的可能性# 多重继承: 兄弟类中都有相同的方法,那么先调用写到前面的那个类的方法
本文标签: Lesson
版权声明:本文标题:Lesson 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1693125418a237519.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论