Day 16 认识类和对象
1.什么是类?
1.什么是类什么是对象
类:就是拥有相同属性和相同功能的对象的集合(抽象的)
对象:对象就是类的实例(类的具体表现)
生活的角度来看:衣服、人、文具、电脑都是类
如果人是类,余婷就是对象、骆昊也是对象
如果电脑是类,我桌上的这台电脑就是对象
如果车是类,楼下那辆奔驰是对象
2.定义类
用代码描述这个类是拥有哪些相同属性和哪些相同功能的对象的集合
class 类名:
类的说明文档
类的内容
说明:
class - 关键字;固定写法
类名 — 程序员自己命名
要求:标识符,不是关键字
规范:驼峰式命名首字母大写;见名知义(看见名字大概知道是什么类);不使用系统命名
类的说明文档 - 上个双引号开头和结尾的注释
类的内容 - 主要包含类中的属性和方法
属性分为:类属性(字段)和对象属性
方法分为:对象/实例方法、类方法和静态方法
注:方法就是定义在类中的函数
3.创建对象
语法:对象 = 类()
stu1 = Student()
print(stu1)
方法就是定义在类中的函数,分为三类:对象方法、类方法、静态方法
1.对象方法
定义:直接定义在类中的函数就是对象方法
怎么调用:要通过对象来调用 – 对象.方法名()
特点:对象方法的第一个参数,在调用的时候不需要传参,系统会自动将当前对象传给self(谁调用就指向谁)
class Person
# eat就是对象方法,self在这里作为对象方法的第一个参数,在调用的时候不需要传参,系统会自动将当前对象传给self(谁调用就指向谁)
def eat(self):
print(f'self:{self}')
print('吃饭')
# sleep是对象方法
def sleep(self):
print('睡觉')
4. python的类有一个特殊的对象方法__
init__
补充:魔法方法–方法名以__
开头并且__
结尾,所有的魔法方法都不需要程序员调用,系统会自动调用
1)创建对象的时候会自动调用__
init__
方法
2)创建对象的时候需不需要参数,需要几个参数由类中的__
init__
方法决定
class Dog:
def __init__(self):
print('init被调用')
dog1 = Dog()
dog2 = Dog()
class Cat:
def __init__(self,name,age=3):
print('猫的init')
c1 = Cat() # 直接执行会报错,name不是第一个参数需要传参
c2 = Cat('小明') # 猫的init 小明(因为给name传参了不会报错)
c3 = Cat(name = '哈哈',age = 2) # 正常传参
2.属性
类中的数据信息就是属性,动作信息就是方法
属性分为类属性(字段)和对象属性
1.类属性
怎么定义:直接定义在类中的变量就是类属性
怎么使用:通过类使用 - 类.类属性
什么时候用:属性值不会因为对象不同而不一样,例如元的圆周率
class Person:
a = 10
b = 'asd'
# a,b是类属性
print(Person.a,Person.b) # 通过类使用
print(Person.a*2) # 100
2.对象属性
怎么定义:以 ‘self.属性名=值’ 的形式定义在类中__
init__
方法里面
怎么使用:通过对象使用 – 对象.属性
什么时候用:属性值会因为对象不同而不一样,就定义成对象属性
class Person:
a = 10
b = 'abc'
def __init__(self):
# name、age、gender就是对象属性
self.name = '小明'
self.age = 18
self.gender = '男'
# 使用对象属性
p1 = Person()
print(p1.name,p1.age,p1.gender) # 小明 18 男
class Student:
def __init__(self,name1,tell = '110'):
# 下面三行三种方法
self.name = name1 # 每次创建对象的时候都必须给name属性赋值
self.study_id = '000' # 每次创建学生对象的时候study_id的值都是'000',且创建的值不可变
self.tel =tell # 每次创建对象的时候可以选择性的tel属性赋值或者不赋值
stu1 = Student('小明')
# 创建stu1
print(stu1.name)
stu2 = Student('小红')
print(stu2.name)
练习:定义一个矩形类,拥有属性:长和宽,拥有方法:计算周长和面积
class Rect:
def __init__(self, long1=10, width1=20):
self.long = long1
self.width = width1
def area(self):
print(f'面积:{self.long * self.width}')
def perimeter(self):
print(f'周长:{(self.width +self.long)*2 }')
r1 = Rect(20,30)
r2 = Rect(10,30)
r3 = Rect()
r2.area()
r1.perimeter()
r3.area()