day_14类和对象

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_---->获取当前类的父类,返回的是一个元祖,元祖的对象是类

你可能感兴趣的:(day_14类和对象)