2018-09-06 Day14-类和对象01

1、理论上的定义:

类:就是拥有相同功能和属性的对象的集合。(抽象)
对象:类的实例(具体)

2、从生活角度

如果说人这个物种是一个类,那么每一个人就是一个对象。

3、编程方式

面向过程编程:以算法为工具
函数式编程:以函数为工具
面向对象编程:以类和对象为工具(面向生活)

类:对拥有相同功能(方法)和相同属性的封装。
封装效果:一个类中可以对多个功能进行封装(多个函数);封装多个属性

一、类的声明格式

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

class:声明类的关键字。
类名:标识符,不能是关键字。首字母必须大写!采用驼峰式命名。例如:StudentSystem。
(驼峰式命名:第一个单词首字母小写,其他单词的首字母大写)
父类列表:这个部分可以省。这是一个继承语法,可以多继承。
类的内容:类的方法和属性。

二、类中的方法

调用方式:对象.函数名()
方法:就是声明在类中的函数
方法分类:对象方法,类方法,静态方法。
直接写在类中的方法,自带一个 self 参数
对象方法:通过对象来调用。

三、构造方法

  • 构造方法:系统自动创建,方法名和类名一样。用来创建对象。
  • _init_:方法的功能是用来做初始化和添加对象属性。
  • 当我们通过构造方法去创建对象的时候,系统会自动调用init方法。
  • 如果类的 init 方法有参数,通过给构造方法传参。

四、创建对象

创建类的时候,系统会默认创建这个类对应的构造方法(方法名和类名相同)。一个类可以有多个对象,只要调用构造方法,就会产生新的对象。

  • 构造方法:类名() --> 创建类对应的对象
  • 通过对象调用对象方法,默认参数 self 不需要传参。
  • 创建对象的过程:调用构造方法在内存中开辟空间创建一个对象,然后用新建的这个对象去调用 init 方法来初始化对象的属性,最后才将对象返回。
class Person:
    """
    人类
    """
    def eat(self):
        print('人吃饭')
#创建Person类的对象,并且将对象的地址存到 p1中
p1 = Person()  
p1.eat()

五、对象属性

1、属性

对象的属性:不同的对象,对应的值可能不一样,这样的属性是对象属性。属于对象类中的对象属性是声明在 init 方法中的。

  • 声明格式是:self . 属性名 = 初始值
  • 对象的使用:对象 . 属性名
方法一
class Student:
    """学生类"""
    def __init__(self):
        #声明对象的属性name,age,id
        self.name = '张三'
        self.age = 0
        self.id = '001'
stu1 = Student()
print(stu1.name,stu1.age,stu1.id)
#通过对象去修改对象的属性
stu1.name = '星辰'
print(stu1.name)

方法二
class Dog:
    """狗类"""
    def __init__(self, type1, color1):
        self.type = type1
        self.color = color1
dog1 = Dog('土狗','黄色')
print(dog1.type, dog1.color)

方法三
class Computer:
    """电脑类"""
    def __init__(self, color='白色', memory=0):
        self.color = color
        self.memory = memory
com1 = Computer()
print(com1.color,com1.memory)

类的字段(属性):属于类,所有对象对应的值是一样的。

2、属性的增删改查

python是动态语言,python中类的对象的属性可以进行增删改查的操作。


  • 方法一:对象.属性名(常用)
    方法二:getattr(对象, 属性名, default=None)
    属性不存在可以通过设置默认值,让程序不崩溃,并且返回默认值。
    方法三:对象._getattribute_(属性名)

  • 方法一:对象.属性 = 新值(常用)
    方法二:setattr(对象, 属性名,值)
    方法三:对象._setattr_(属性名,值)

  • 方法一:对象.属性 = 新值(属性不存在,就是添加)
    方法二:setattr(对象, 属性名,值)
    方法三:对象._setattr_(属性名,值)

  • 方法一:del 对象.属性
    方法二:delattr(对象,属性)
    方法三:对象. _delattr_(属性)

六、类的属性(字段)

1、类的字段:就是声明在类的里面,方法的外面的变量

class Person:
  #这个number就是类的字段
  number = 6

2、什么时候声明类的属性:
属于类,并且对于类的所有对象来说是共有的。

3、怎么使用

print(Person.number)

七、对象方法

  • 直接声明在类中的函数默认是对象方法,有一个默认参数 self
  • 对象方法要通过对象来调用:对象.对象方法
  • 对象方法中默认参数 self , 不需要传参。因为在调用这个方法时,系统自动当当前对象传给 self 。
  • 哪个对象调用,self 就指向谁。对象能做的事情,self 也能做,本质上是一样的

练习:

# 1、写一个矩形类,有属性长和宽,功能:求周长和面积
class Rect:
    def __init__(self, width, weight):
        self.width = width
        self.weight = weight
    def perimeter(self):
        print('周长是:',(self.weight + self.width)*2)
    def area(self):
        print('面积是:',(self.width*self.weight))
rect1 = Rect(3,4)
rect1.perimeter()
rect1.area()

周长是: 14
面积是: 12

#2、写一个班级类,班级里面有多个学生的成绩,可以获取成绩的最高分
class Class_python:
    def __init__(self,*score):
        self.score = score
    def score_max(self):
        a = list(self.score)
        a.sort()
        print('最高分是:%d'%a[-1])
class1 = Class_python(2,3,4,5,23,43,32,)
class1.score_max()

最高分是:43

八、类的方法

声明形式:声明方法前需要使用@classmethod说明。
特点:自带一个默认参数 cls,这个参数调用的时候不需要传值。系统自动传值,谁调用指向谁。(因为只能被类调用,所以始终指向当前类)
调用:通过类来调用 --> 类.类方法()

class Class1:
    #声明一个对象方法
    def class2(self):
        print('这是一个对象方法')
    #声明一个类方法
    @classmethod
    def class_func(cls):
        print('这是一个类方法')

九、静态方法

声明形式:声明方法前需要使用@staticmethod说明。
特点:没有默认参数
调用:通过当前类调用 --> 类.静态方法()

    @staticmethod
    def static_func():
        print('这是一个静态方法')
调用
c1 = Class1()
c1.static_func()

十、怎么选择三种方法

a、只要实现方法的功能需要用到对象的属性,我们就使用对象方法;否则就使用静态方法或者类方法。
b、不使用对象方法的前提下,如果实现功能需要用到类的字段,就用类方法。
c、实现功能既不需要对象的属性,又不需要类的字段,就使用静态方法。
注意:静态方法和类方法划分不用那么严格,因为静态方法能做的,类方法也能使用;反之亦然。

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

推荐阅读更多精彩内容

  • 类和对象 理论上的定义类: 拥有相同功能和相同属性的对象的集合(类是抽象的)对象: 类的实例(对象是具体的) 生活...
    rzlong阅读 184评论 0 0
  • 1.类的声明 类:对拥有相同功能(方法)和相同属性的封装 封装效果:一个类中可以对多个功能进行封装(多个函数);封...
    xaidc阅读 72评论 0 0
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,084评论 1 32
  • 我喜欢旅行,发现和探索未知的世界,我的生活在不断地移动。但如果有一个地方能让我永远的停住脚步,那必定是这个世界上最...
    Holiday历险记阅读 702评论 14 15
  • 最近在看《康熙王朝》,对周培公这个人物很有感触,一生鞠躬尽瘁,粉身碎骨为大清奉献,帮助康熙平三藩,解京城之危,却因...
    开拓者2021阅读 189评论 0 0