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

2018-09-06  本文已影响0人  Deathfeeling
1、理论上的定义:

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

2、从生活角度

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

3、编程方式

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

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

一、类的声明格式

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

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

二、类中的方法

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

三、构造方法

四、创建对象

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

class Person:
    """
    人类
    """
    def eat(self):
        print('人吃饭')
#创建Person类的对象,并且将对象的地址存到 p1中
p1 = Person()  
p1.eat()

五、对象属性

1、属性

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

方法一
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中类的对象的属性可以进行增删改查的操作。

六、类的属性(字段)

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

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

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

3、怎么使用

print(Person.number)

七、对象方法

练习:

# 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、实现功能既不需要对象的属性,又不需要类的字段,就使用静态方法。
注意:静态方法和类方法划分不用那么严格,因为静态方法能做的,类方法也能使用;反之亦然。

上一篇下一篇

猜你喜欢

热点阅读