编程思想
面向过程编程:算法和逻辑
函数式编程:函数
面向对象编程:类和对象
1.类和对象
类 -- 就是拥有相同功能和相同属性的对象的集合(抽象的)
对象 -- 类的实例(具体的)
2.类的声明 -- 确定这个类的共同的属性和功能是什么
1)语法:
class 类名:
类的说明文档
类的内容
2)说明
class - 关键字
类名 - 要求:标识符,不能是关键字
规范:a. 首字母大写,采用驼峰式命名(多个单词相连,每个单词的首字母大写) b.见名知意 c. 不能使用系统提供的函数名或者类名
类的说明文档 -- 要求和函数说明文档一样
类的内容 -- 主要包含属性和方法(方法就是声明在类中函数)
3)声明对象
对象 = 类() -- 同一个类可以创建多个对象
4)类中的方法分为3种:类方法,对象方法,静态方法
3.对象方法
1)怎么声明:直接声明(声明前面不需要加装饰器)在类中的函数就是对象方法
2)特点:自带一个self参数,用对象调用对象方法的时候self不用传参,系统会自动将当前对象传给self,它可以做到谁调用就指向谁。
3)怎么调用:'对象.对象方法()'的形式来调用
4.构造方法(函数) -- 函数名和类的名字一样的函数就是构造函数:类名()-- 调用构造方法
注意:在pyhon中声明类的时候系统会自动为这个类创建一个函数,函数的作用是创建对象(用来实例化对象)。
1)执行过程:在内存中开辟空间创建对象,用创建好的对象去调用'_ _ init_ _'方法,返回对象在内存中的地址。(对象的实际作用为接收构造方法调用魔法方法所获得的内存中的地址)
5._ _ init_ _方法(函数) -- 魔法方法(都会自动调用)
声明在类中用来对对象进行初始化的方法;(当对象一创建出来,这个方法就会自动被调用)
创建对象的时候构造方法需不需要传参,需要传几个参数,都看魔法方法需要几个。
6.类中的属性(属性就是声明在类中的变量)
类中的属性分为:字段和对象属性。
1)字段:
a.怎么声明:声明在类的里面函数的外面就是字段
b.怎么使用:以‘类.字段’的形式去使用
c.什么时候用:属性的值不会因为对象的不同而不同,这样的属性就声明成类的字段
2)对象属性(重要)
a.怎么声明:以‘self.属性名=值’的形式声明在init方法中
b.怎么使用:通过对象去使用
c.什么时候用:属性的值会因为对象的不同而不同,这样的属性就声明成类的对象属性
练习:
class Dog:
def __init__(self, name, dog_type, gender='公'):
self.name = name
self.age = 10
self.gender = gender
self.dog_type = dog_type
def Dog_1(self):
print(self.name, self.age, self.dog_type, self.gender)
def jiaohuan(self):
print(self.name+'汪汪汪')
a = Dog(name='旺财', dog_type='金毛')
a.Dog_1()
a.jiaohuan()
7.对象属性的增删改查
Python中类的对象中的对象属性支持增删改查
1)查(获取对象属性的值)
方法1:对象.属性
方法2:getatter(对象,‘属性名’)/getatter(对象,‘属性名’,默认值)
方法3:对象.getattribute('属性名')
2)增/改
方法1:对象.属性=值(属性存在就修改,不存在就增加)
方法2:setattr(对象,'属性名',值)
3)删除
方法1:del 对象.属性
方法2:delattr(对象,'属性名')
8.slots魔法
作用:通过给slots字段赋值来约束当前类的对象有哪些对象属性(确定类中只能有哪些属性)
因此如果添加属性多了就会报错,但是可以少。
class Dog:
slots = ('name', 'age') -- 后面的对象方法就不能使用其他属性,只能使用括号里面的。
def init(self):
pass