‘’’
类:类就是拥有相同功能和相同属性的对象的集合(类是抽象的)
对象:类的实例就是对象
从生活的角度来看:
如果人是类,余婷就是人的对象,骆浩是人的另外一个对象
如果车是类,自行车、汽车、公交车是车类的子类(分类),具体的某一辆车才是对象
‘’’
‘’’
语法:
class 类名:
类的说明文档
类的内容(类的属性和类的方法)
说明:
class - 关键字;固定写法
类名 - 程序员自己命名
要求:是标识符;不能是关键字
规范:驼峰式命名,首字母大写;见名知义;不使用系统提供的模块名、类名、函数名…
类的说明文档 - 使用三个双引号引起来的注释,主要是用来对类的功能进行说明。(可有可无)
类的内容 - 包括类的属性(类属性和对象属性)和类的方法(对象方法、类方法和静态方法)
‘’’
‘’’
语法:
类名()
‘’’
class Student:
"""
这是一个学生类
属性:
功能:
"""
def __init__(self):
self.name = '小明'
self.age = 18
self.stu = '001'
self.major = 'python'
def study(self):
print('好好学习天天向上')
def play(self):
print('召唤师峡谷')
class Circle:
'''
圆:属性有半径、圆周率;方法:计算面积、计算周长
'''
pi = 3.14
def __init__(self):
self.r = 0
def area(self):
print(Circle.pi * self.r ** 2)
def perimeter(self):
print(2 * Circle.pi * self.r)
# 创建两个Student对象
s1 = Student()
s2 = Student()
# 创建Circle类的对象
c1 = Circle()
‘’’
名字和类同名,功能是创建对应的类的对象的函数。
python在定义类型的时候,系统会自动为这个类创建对应的构造方法
魔法方法:类中用__开头并且用__结尾的函数函数,统称为魔法方法。这一类方法不需要程序员去调用,系统会在合适的时候自动调用
‘’’
‘’’
1)当通过类创建对象的时候,系统会自动调用这个类中的__init__方法
2)在类中添加__init__方法的时候,只要保证方法和默认参数self不动以外,程序员可以根据情况随意添加参数和函数体
3)调用构造方法创建对象的时候需不需要参数,需要几个参数看对应类中的__init__方法除了self以外有没有额外的形参,有几个
‘’’
class Person:
def __init__(self):
print('init')
p1 = Person()
p2 = Person()
class Dog:
def __init__(self, name, age):
print(name, age)
d1 = Dog('大黄', 3)
d2 = Dog(name='小白', age=2)
d3 = Dog('旺财', age=4)
‘’’
1.类属性
定义:直接定义在类里面函数外面的变量
特点:不会因为对象不同而不一样
怎么用:类名.类属性
2.对象属性
定义:定义在__init__函数中,以’self.属性名=值’的形式来定义
特点:会因为对象不同而不一样
怎么用:对象.对象属性
‘’’
class Person:
a = 10
def __init__(self):
self.name = '张三'
self.age = 18
self.gender = '男'
# 使用类属性
print(Person.a)
Person.a = 100
print(Person.a)
# 使用对象属性
p1 = Person()
print(p1.name, p1.age, p1.gender)
p1.name = '小明'
print(p1.name, p1.age, p1.gender)
class Dog:
def __init__(self, name, color, gender='母狗', breed='土狗'):
self.name = name # 每次创建狗的对象的时候必须给name属性传参
self.gender = gender # 每次创建狗的对象的时候可以不给gender赋值,如果不赋值默认值是'母狗'
self.age = 1 # 每次创建狗的对象的时候age的值只能是1
self.color = color
self.breed = breed
# __repr__魔法方法:打印当前类的对象的时候,系统会自动调用这个方法,并且把这个方法的返回值作为打印结果(返回值必须是字符串)
def __repr__(self):
# self:打印谁self就指向谁
return str(self.__dict__)
d1 = Dog('大黄', '黄色')
# print(d1.name, d1.color, d1.gender, d1.age, d1.breed)
print(d1)
d2 = Dog('小白', '白色', breed='哈士奇')
print(d2)
str1 = "{'name': '小白', 'gender': '母狗', 'age': 1, 'color': '白色', 'breed': '哈士奇'}"
new_str = f'<{str1[1:-1]}>'
print(new_str)
‘’’
怎么定义:直接定义在类中的函数就是对象方法(定义函数前不加装饰器)
特点:自带参数self,调用的时候参数self不需要传参,系统会自动将当前对象传给self(谁调用self就指向谁)
怎么调用:通过 对象.方法名() 的形式来调用
什么时候用:如果实现函数的功能需要用到对象的属性的时候
‘’’
class Student:
def study(self):
print('self:', self)
print('学习')
def eat(self, food):
print('吃东西', food)
def func1(self):
print('函数')
s1 = Student()
print('s1:', s1)
s1.study()
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
r1 = Rectangle(100, 20)
print(r1.area())
r2 = Rectangle(50, 80)
print(r2.area())
# 练习:定义一个点类(二维),有属性:x坐标,y坐标 方法:求一个点到另一个点的距离
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def length(self, other):
return ((self.x - other.x) ** 2 + (self.y - other.y) ** 2) ** (0.5)
p1 = Point(4, 5)
p2 = Point(1, 1)
print(p1.length(p2))