1.面向对象编程
1.1编程
1.面向过程编程---->算法,逻辑(数学逻辑)
2.函数式编程---->函数
3.面向对象编程---->类和对象(生活)
2.类的声明
2.1类的定义
类是相同属性和相同功能的对象的集合(抽象的)
对象是类的实例(具体的)
例如:人(类)成龙(对象)中国人(子类)
2.2类的声明
格式:
class 类名(父类列表):
类的说明文档
类的内容
说明:
class->python中的关键字
类名-->标识符,不能是关键字;类名使用驼峰式命名,并且首字母大写
驼峰式命名:如果一个名字由多个单词组成,第一个单词首字母小写,后面的单词首字母大写
PEP8命名规范:所有字母小写
(父类列表)-->继承语法,让说明的类继承括号中的父类。这个结构可以省略,让当前类继承python中的基类:object
类的说明文档-->注释,对类进行说明
类的类容-->包含属性(存储数据的变量)和方法(函数)
方法:声明在类中的函数
class Person:
"""人类"""
def eat(self):
print("吃饭")
2.3对象的声明
格式:
对象名 = 类名()
对象名 -->变量名
类名-->必须是声明过的类
p1=Person()
p2=Person()
3.对象方法
类的内容包含属性和方法,方法分为对象方法、类方法、静态方法
3.1对象方法
直接声明在类中的函数就是对象方法。对象方法都有一个默认参数self,需要使用对象来调用
对象调用:对象.方法名()。调用对象方法的时候,不需要给self传值,系统会自动将当前对象传递给self。
self:谁调用当前的对象方法,self就指向谁。self就是当前类的对象,类的对象能做的,self都能做。
class Person:
def eat(self):
print("self:",self)
self.sleep()
def sleep(self):
print("睡觉")
p1 =Person()
print("p1",p1)
p1.eat()
# p1 <__main__.Person object at 0x0000022FF8955FD0>
# self: <__main__.Person object at 0x0000022FF8955FD0>
# 睡觉
4.构造方法
4.1定义
构造方法就是函数名和类名一样的方法,作用是用来创建对象的。
声明类时,系统会自动创建构造方法
创建对象的过程:调用构造方法在内存中开辟空间创建对象,并且会自动调用init方法去对这对象进行初始化;最后将创建好的对象的地址返回
4.2__init__方法
对象方法
不需要手动调用,创建完对象后,会被自动调用
class Dog:
def __init__(self):
print("……")
d1 = Dog()
# ……
4.3带其他参数的init方法
_init_方法的参数要通过构造方法来传。构造方法的实参会传递给init方法的形参
class Person:
def __init__(self,name):
print(name)
p1 = Person("小明")
#”小明“
5.对象的属性
类的内容包含属性和方法,属性又分为对象属性和类的字段
属性:用来在类中去保存数据的变量
对象属性:属性会因为对象的不同而不同,这种属性就需要声明成对象属性;对象属性要通过对象来使用
5.1对象属性的声明(重点)
1.必须声明在_init_方法中
2.声明的格式:self.属性名 = 初值
5.2对象属性的使用
格式:对象.属性
class Person:
def __init__(self,name ="小鲜肉"):
self.name = name
self.age = 1
self.sex = "男"
p1 = Person()
p1.name = "小鲜肉1"
print(p1.name)
#小鲜肉1
6.对象属性的增删改查
class Student:
def __init__(self,name = "",age = 0,stu_id = "001" ):
self.name = name
self.age = age
self.stu_id=stu_id
s1 =Student()
6.1查(获取对象的属性的值)
方法1:对象.属性(对象不存在时报错AttributeError)
print(s1.name)
方法2:getattr(对象,属性名,默认值),属性不存在时返回默认值,如果没有设置默认值,属性不存在时还是会报错。
print(getattr(s1,name,"默认值"))
方法3:对象._getattribute_(属性名);属性不存在会报错
6.2增加/修改(给对象增加/修改属性)
注意:给对象增加属性,只会添加到当前对象中。不会影响当前类的其他类
(属性不存在就增加,存在就修改)
方法1:对象.属性 = 值
方法2:setattr(对象,属性名,属性值)
方法3:对象._setattr_(属性名,属性值)
6.3删除(删除对象属性)
注意:只删除当前对象的属性,对其他对象没影响
方法1:del 对象.属性
方法2:delattr(对象,属性名);属性不存在会报错
方法3:对象._delattr_(属性名)
7.对象的使用
在python中所有的数据都是对象,所有的变量存储的都是对象的地址
将对象给别的变量赋值,stu1 = stu2,赋对象地址,import copy;stu3 = copy.copy(stu1),产生新的对象
想不返回对象的地址,可用_str_:
def __str__(self):
return str(self.__dict__)
#return "ksjfj"
#return self.name
return后为self.dict时,返回对象的所有属性和属性值,return后有别的字符串时,就返回该字符串,只能是字符串。
8.slots魔法
类的字段:对象属性,类的字段,声明在类中函数外的变量就是类的字段。不会因对象的变化而改变,如人的总数。使用时要通过类来使用:类.字段
_slots:用来约束当前类的对象的属性有那些
_slots(可以有的属性,如:"name"),其中的属性不一定全用,但绝对不能有其他属性
9.内置属性
1.类._name---->获取当前类的名字
2.类._doc---->获取类的说明文档
3.对象._class---->获取对象的类
4.类._dict---->获取当前类的所有的字段,以字典的形式返回,(函数名也是字段)
5.对象._dict---->获取当前所有属性和其对应的值
6.类._module---->获取当前类所在的模块名
7.类._bases_---->获取当前类的父类,返回的是一个元祖,元祖的对象是类
网友评论