• 主页

  • 投资

  • IT

    🔥
  • 设计

  • 销售

关闭

返回栏目

关闭

返回python栏目

15 - 语法 - class xx: -

作者:

贺及楼

成为作者

更新日期:2024-10-27 12:07:13

类

作用:定义类别,减少代码量

大概理解类的作用


Python类是面向对象编程的核心,它允许创建自定义数据类型。通过类,可以封装数据和功能,实现代码复用和模块化。类支持继承,使得代码结构更清晰,功能扩展更灵活。它还支持多态,允许以统一接口处理不同类型的对象。简而言之,类是构建复杂程序的基石。

就是分文件的,分类,分方法,可以实现更多逻辑,更少代码,更容易迁移

类(定义类) __init__()定义初始值 -> 实例化 实例化改变color颜色
cat猫 蓝色 -> Tom 蓝色
cat猫 蓝色 -> 咖啡猫 黄色
mouse老鼠 蓝色 -> Jerry 棕色
mouse老鼠 蓝色 -> 米奇老鼠 黑白色

类

一、最简单的类

  1. class Dog():
  2. """创建一个Dog类"""
  3. def __init__(self, name, age, color="yellow"): # 构造函数
  4. """初始化属性name和age"""
  5. self.name = name
  6. self.age = age
  7. self.color = color # 给属性指定默认值
  8. self.dbname = '' # 数据表类可以写库名字,建议写到配置文件里
  9. self.tablename = '' # 数据表类可以写表名字,建议写到配置文件里
  10. def sit(self): # 定义蹲下方法
  11. """蹲下"""
  12. print (self.name + " is now sitting.")
  13. def roll_over(self): # 定义打滚方法
  14. """打滚"""
  15. print (self.name + " rolled over!")
  16. def two_action(self): # 组合:先打滚后蹲下
  17. self.roll_over()
  18. self.sit()

使用类

实例化,name, age一定要给、按顺序给,color不一定,但是默认黄色,写一些固定信息

  1. my_dog = Dog('willie', 6)
  2. """访问属性"""
  3. print(my_dog.name ) # willie
  4. print(str(my_dog.age)) # 6
  5. my_dog.sit() # 调用方法:
  6. ## willie is now sitting.
  7. my_dog.two_action() # 调用方法:
  8. ## willie rolled over!
  9. ## willie is now sitting.
  10. my_dog.age = 12 # 修改age属性值
  11. print(my_dog.age) # 12
  12. print(my_dog.color) # yellow
  13. my_dog_2 = Dog('willie', 6, 'black')
  14. print(my_dog_2) # 使用不一样的内存空间
  15. print(my_dog_2.color) # black
  16. my_dog_3 = Dog('willie', 7, color='red')
  17. print(my_dog_3) # 使用不一样的内存空间
  18. print(my_dog_3.color) # red

模块化类

  1. from car import Car # 从car.py文件中导入Car类
  2. from car import Car, ElectricCar # 从car.py文件中导入Car类和ElectricCar类,用逗号
  3. from car import * # 导入car.py文件中的所有类

issubclass() 判断参数 class 是否是类型参数 classinfo 的子类

  1. class A:
  2. pass
  3. class B(A):
  4. pass
  5. print (issubclass(B,A)) # 返回 True

callable() 对象是否是可调用

  1. callable(0)
  2. False
  3. callable("runoob")
  4. False
  1. def add(a, b):
  2. return a + b
  3. callable(add) # 函数返回 True
  4. True
  1. class A: # 类
  2. def method(self):
  3. return 0
  4. callable(A) # 类返回 True
  5. True
  6. a = A()
  7. callable(a) # 没有实现 __call__, 返回 False
  8. False
  1. class B:
  2. def __call__(self):
  3. return 0
  4. callable(B)
  5. True
  6. b = B()
  7. callable(b) # 实现 __call__, 返回 True
  8. True

hasattr()判断对象是否包含对应的属性

  1. class Coordinate:
  2. x = 10
  3. y = -5
  4. z = 0
  5. point1 = Coordinate()
  6. print (hasattr(point1, 'x'))
  7. print (hasattr(point1, 'y'))
  8. print (hasattr(point1, 'z'))
  9. print (hasattr(point1, 'no')) # 没有该属性
  10. 输出结果:
  11. True
  12. True
  13. True
  14. False

delattr()删除属性

  1. class Coordinate:
  2. x = 10
  3. y = -5
  4. z = 0
  5. point1 = Coordinate()
  6. print ('x = ',point1.x)
  7. print ('y = ',point1.y)
  8. print ('z = ',point1.z)
  9. delattr(Coordinate, 'z')
  10. print ('--删除 z 属性后--')
  11. print ('x = ',point1.x)
  12. print ('y = ',point1.y)
  13. ## 触发错误
  14. print ('z = ',point1.z)

setattr()设置/更新属性值

  1. class A(object):
  2. bar = 1
  3. a = A()
  4. getattr(a, 'bar') # 获取属性 bar 值
  5. 1
  6. setattr(a, 'bar', 5) # 设置属性 bar 值
  7. a.bar
  8. 5

vars()返回对象object的属性和属性值的字典对象

  1. class EE():
  2. '''文档描述'''
  3. bar = 1
  4. def aa(self):
  5. print ("aafun")
  6. print(vars(EE))
  7. mappingproxy({
  8. '__module__': '__main__',
  9. '__doc__': '文档描述',
  10. 'bar': 1,
  11. 'aa': <function EE.aa at 0x7fd738017a70>,
  12. '__dict__': <attribute '__dict__' of 'EE' objects>,
  13. '__weakref__': <attribute '__weakref__' of 'EE' objects>
  14. })