Day14类和对象

类的声明

1.什么是类
类就是对用有相同属性和相同功能的对象的集合
对象就是类的实例
类是抽象的,对象是具体的

从生活看类和对象
如果人是一个类,具体的每个人就是对象

2.类的声明
class 类名(父类列表):
类的说明文档
类的内容

说明:
class:Python中声明类的关键字
类名:标识符,不能是关键字;使用驼峰命名法,见名知义
驼峰命名法:如果一个名字由多个单词组成,第一个单词首字母小写,后面每个单词首字母大写
PEP8命名规范:如果一个名字由多个单词组成,所有字母小写,单词之间用下划线隔开

(父类列表):继承语法,让声明的类继承括号中的父类,这个结构可以省略,让当前类继承python的基类object
类的说明文档:注释,对类进行说明
类的内容:包含属性和方法
方法:声明在类中的函数

声明类

class Person:
    def eat(self):
        print('吃饭饭')

3.对象的声明
格式:
对象名 = 类名()
构造方法
对象名 --> 变量名
类名 --> 必须是声明过的类

    p1 = Person()
    p2 = Person()

对象方法

1.类的内容包括属性和方法,方法分为对象方法,类方法,静态方法

对象方法:直接声明在类中的函数就是对象方法,对象方法都有一个默认参数self,需要通过对象来调用
self不需要传参数,系统会自动将当前参数传给self

当前对象:谁调用当前对象的方法,self就指向谁,self就是当前类的对象,类的对象能做的,self都能做

class Person:
'''人类'''

# 对象方法eat
    def eat(self):
        print('chifan')

构造方法和init方法

1.构造方法:函数名和类名一样的方法,作用是用来创造对象,
在声明类的时候,系统会自动为这个类创建构造方法

创建对象的过程:调用构造方法在内存中开辟空间创造对象,并且会自动调用init
对这个对象进行初始化

2.init方法
对象方法
不需要手动调用,创建完对象后自动调用

class Dog:
    def __init__(self):
        print(self)
        print('')

3.带其他参数的构造方法
init方法里面的参数要通过构造方法来传

class Person
    def __init__(self,name,age):
            print(name,age)

p1 = Person('小红',20)

对象的属性

类的内容包函属性和方法,属性又分为对象属性和类的字段

属性:用来在类中保存数据的变量
对象属性:属性的值会因为对象的不同而不同,这种属性就需要声明成对象属性,如人的姓名等

1.对象属性的声明
a.必须声明在init方法中
b.声明格式:self.属性 = 初值

2.使用对象属性:self.属性 = 初值
声明一个人类,要求有名字年龄和性别属性
class Person:
def init(self,name1,age1,sex1):
self.name = name1
self.age = age1
self.sex = sex1
p1 = Person('张三',18,'男')
print(p1.name)
对象属性的增删改查
class Student:
def init(self,name,age = 18,stu_id = 12):
self.name = name
self.age = age
self.stu_id = stu_id

1.查(获取对象属性的值)

方法1:对象.属性 -->获取属性值,若不存在会报错

print(stu1.name)

方法2:getattr(对象,属性,默认值) -->
获取属性的默认值,若果设置了默认值,当属性不存在的时候,不会报错,若未设置默认值,还是会报错

print(getattr(stu1,'name2','张三'))

方法3.对象.getattribute(属性名)-->获取指定的属性值,属性不存在会报错

2.增(给对象增加属性)

方法1.对象.属性 = 值(属性不存在)
注意:给对象添加属性,只能添加到当前对象中,不会影响到当前类其他对象
方法2.setattr(对象,属性名,属性值)
对象.setattribute(属性名)-->

3.修改

stu3.name = '李四'
print(stu1.name)

setattr(stu3,'name','hehe')
print(stu3.name)

4.删除(删除对象属性)

注意:删除只删除当前对象的属性,对当前类其他属性没有影响
方法1.
del 对象.属性
方法2.
delsttr(对象,属性名)
方法3.
对象.gdelattribute(属性名)-->删除指定的属性值,属性不存在会报错

对象的应用

class Student:
    def __init__(self,name,age = 18,stu_id = 12):
        self.name = name
        self.age = age
        self.stu_id = stu_id

stu1 = Student('小明')

1.查(获取对象属性的值)
方法1:对象.属性 -->获取属性值,若不存在会报错

print(stu1.name)

方法2:getattr(对象,属性,默认值) -->
获取属性的默认值,若果设置了默认值,当属性不存在的时候,不会报错,若未设置默认值,还是会报错

print(getattr(stu1,'name2','张三'))

方法3.对象.getattribute(属性名)-->获取指定的属性值,属性不存在会报错

2.增(给对象增加属性)

方法1.对象.属性 = 值(属性不存在)
注意:给对象添加属性,只能添加到当前对象中,不会影响到当前类其他对象
方法2.setattr(对象,属性名,属性值)
对象.setattribute(属性名)-->

3.修改
stu3.name = '李四'
print(stu1.name)

 setattr(stu3,'name','hehe')
print(stu3.name)

4.删除(删除对象属性)

注意:删除只删除当前对象的属性,对当前类其他属性没有影响
方法1.
del 对象.属性
方法2.
delsttr(对象,属性名)
方法3.
对象.gdelattribute(属性名)-->删除指定的属性值,属性不存在会报错

slots魔法

属性: 对象属性,类的字段
1.类的字段:声明在类里面,函数外面的字段,使用的时候要通过类来使用
应用:类名.字段
2.__slots--:用来约束当前类的对象的属性有哪些

class Dog:
    num = 10
    __slots__ = ('color','name','type')
    def __init__(self,color,name,type):
        self.color =color
        self.name = name
        self.type = type

内置类属性

class Person:
    '''人类'''
    # 类的字段
    num = 61

    # 对象属性
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex

    #对象方法
    def run(self):
        print('%s在跑'% self.name)

p1 = Person('小明',18,'男')

1.name

类.name -->获取当前类的名字

print(Person.__name__,type(Person.__name__))

2.doc
类.doc -->获取类的说明文档

print(Person.__doc__)

3.class

对象.class -->获取对象的类,相当于直接使用当前类

my_class = p1.__class__  # my_class相当于一个类
print(p1.__class__)

4.dict

类.dict -->获取当前类所有类的字段和其对应的值,以字典的形式返回
对象.dict --> 获取当前对象所有的属性和其对应的值,以字典的形式返回

print(Person.__dict__)

5.module

类.module -->获取当前类所在模块名

print(Person.__module__)

6.base

类.base -->获取当前类的父类,返回一个元组,元组的元素是一个类

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,951评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,606评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,601评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,478评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,565评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,587评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,590评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,337评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,785评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,096评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,273评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,935评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,578评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,199评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,440评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,163评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,133评论 2 352

推荐阅读更多精彩内容

  • 一、面向对象 编程思想: 1.面向过程编程 ---> 算法,逻辑(数学逻辑) 2.函数式编程 ---> 函数,模...
    留级是不可能留级的阅读 178评论 0 0
  • 01-面向对象编程 编程思想:1.面向过程编程 --->算法, 逻辑(数学逻辑)2.函数编程 ---> 函数3.面...
    兲丅阅读 312评论 0 0
  • 1 类 1.1 类的简介 1.理论上的定义类:就是拥有相同功能和相同属性的对象的集合对象:类的实例 2.从生活角度...
    C0mpass阅读 241评论 0 0
  • 一、类和对象: 1.理论上的定义类:就是拥有相同功能和相同属性的对象的集合(类是抽象)对象:类的实例(对象是具体的...
    祖国的花朵_3980阅读 230评论 0 0
  • 好奇简书的标题是做什么用处?难道可以来归类系列的文章。不管,以后便知。
    ST糖水阅读 152评论 0 0