欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python的(class,self,init,str.)学习,含代码实例

程序员文章站 2022-05-09 20:14:14
Python的(class,self,init,str.)学习,含代码实例 今天开始学对象及面向对象的方法:关键字:class,self,init,str. 现实生活中,一切都...

Python的(class,self,init,str.)学习,含代码实例

今天开始学对象及面向对象的方法:关键字:class,self,init,str.

现实生活中,一切都是对象,如人类,动物,植物,哪怕是没有生命的汽车、电子产品,或者说抽象的天气等都是对象,而对象包含了静态特征和动态特征,静态如物品的颜色,形状,大小,动态如物品的转动,运动等。而我们今天要学的,对象的静态特征抽象成属性,也就是变量;把动态特征抽象成行为,也就是方法。

step1. 定义类

类是对象的蓝图和模板,有了类就可以创建对象

定义类需要做两件事情:数据抽象和行为抽象

数据抽象 - 抽取对象共同的静态特征(找名词) - 属性

行为抽象 - 抽取对象共同的动态特征(找动词) - 方法

定义类的关键字 - class- 类名(每个单词首字母大写)

class Student(object):           # 定义类,每个单词首字母大写
    def __init__(self,name='none',age=18): # 构造方法(构造器/构造子 - constructor)
                                           # 调用该方法的时候,不是使用方法的名字,而是使用类的名字
                                           # 可以设默认值
        # 给对象绑定属性
        self._name = name       # __name 加上一个下划线,可以保护该name,不允许再修改。
        self._age = age

    # 我们定义一个方法就代表对象可以接收这个消息
    # 对象的方法的第一个参数都是统一写成self
    # 它代表了接收消息的对象 - 对象.消息(参数)
    def study(self,course):
        print('%s正在学习%s' %(self._name, course))

    def watch_av(self):
        if self._age >= 18:
            print('%s正在观看岛国爱情动作片!!' % self._name)
        else:
            print('%s,你才%s岁,我们推荐你去看《熊出没》!' % (self._name,self._age))

小结:这是第一步,定义类,把静态特征抽象出来,就学生而言,什么是静态特征呢,比如姓名,年龄;那么动态特征呢,比如学生可以看电视,学生可以学习,可以看书等等。看书是一个动作,看电视一个动作,可以分开来定义。框架都是一样,抓住静态特征与动态特征,仔细思考,应该都能写出自己想要的结果,只是能不能达到最后的效果,那就要仔细推敲,未达目的不罢休的精神去完成代码。

step2. 调用构造方法创建学生对象

实际调用的是Student类中的init方法

def main():
    stu1 = Student('xl')
#    stu1.name = 'xl'

step 3.给对象发出消息

通过给对象发消息堂对象完成某些工作

解决任何问题都是通过让对象去做事情

stu1.study('Python程序设计')
    stu2 = Student('yqx')
    stu2.name = 'yc'
    stu2.study('HTML网页设计')
    stu2.watch_av()


if __name__ == '__main__':
    main()

小结:这一部分就是完成学生的动作,通过给对象发送消息完成对应的某些工作,解决所有问题都是通过让对象去做事情完成的。

例:数字时钟

class Clock(object):
    def __init__(self,hour=0,minute=0,second=0):
        self._hour = hour
        self._minute = minute
        self._sencond = second

    def run(self):
        """走字"""
        time_n = [self._hour,self._minute,self._minute]
        self._sencond += 1
        if self._sencond == 60:
            self._sencond = 0
            self._minute += 1
            if self._minute == 60:
                self._minute = 0
                self._hour += 1
                if self._hour == 24:
                    self._hour = 0

    # 下面的方法__str__(self)可以获得对象的字符串表达形式
    # 当我们用print打印对象时会自动调用该方法
#    def __str__(self):
#        return ('%02d:%02d:%02d' % (self._hour, self._minute, self._sencond))

    def show(self):
        return ('%02d:%02d:%02d'%(self._hour,self._minute ,self._sencond ))


def main():
    clc = Clock(23,59,58)
    print(clc)
    print(id(clc))
    while True:
        system('cls')
        print(clc.show())
        time.sleep(1)
        clc.run()



if __name__ == '__main__':
    main()

小结:数字时钟,对象就是小时,分钟,秒,让这些对象,进行变更来完成数字时钟,而方法就是秒表逢60进1,分钟逢60进1,小时逢24置零,完成数字时钟的制作。

例:围墙、泳池造价:

from math import pi
# 我们定义一个类实际上是把数据和操作数据的函数绑定到一起
# 形成一个逻辑上的整体 这个整体就叫做对象
# 而且将来任何时候想使用这种对象时直接复用这个类型
class Circle(object):

    def __init__(self,radius=0):
        self._radius = radius

    def area(self):
        return pi * self._radius **2

    def perimeter(self):
        return 2 * pi * self._radius


def main():
    r = float(input('圆的半径r='))
    big = Circle(r + 3)
    small = Circle(r)
    print('围墙的造价为%.2f'%(big.perimeter()*25))
    print('过道的造价为%.2f'%((big.area()-small.area())*32.5))


if __name__ == '__main__':
    main()

小结:这是之前的一道小问题,游泳池过道及围墙的造价。游泳池半径就是静态特征,是对象,而要得到相关的过道,围墙造价,就需要通过半径去计算得到,这是动态特征,就是方法。让对象通过方法去完成动作。