• 小白学Python面向对象01


      python里面处处皆是对象!那么到底什么是对象?官方答案:把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为(class),通过类的封装(encapsulation)隐藏背部细节,通过继承(inheritance)实现类的特化(specialization)和泛华(generalization),通过多态(polymorphism)实现基于对象类型的动态分派。虽然听不太懂,但是我知道学了python我也会有对象了。

    类和对象

      类是对象的模板和集合,而对象是类的实例,前者是抽象概念,后者是个具体东西。对象都有静态特征(属性)和动态特征(行为),将一群具有共同特征的对象圈起来,就可以定义为“类”。总共分三步:

    1、定义类,使用class关键字,类名的每个单词首字母大写

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

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

    2、调用构造方法创建学生对象

    3、通过给对象发消息,让对象完成某些工作

    class Student(object):#定义类,object是类的爸爸
    
        def __init__(self, name, age):
            self.name = name
            self.age = age
        def study(self,course):#定义行为方法
            print('%s正在学习%s' % (self.name, course))
    
    
    def main():
        stu1 = Student('小明',18)
        stu1.study('python程序设计')
    
    
    if __name__ == '__main__':
        main()
    

     Python中对象的访问可见性

      一般的编程语言,都会把对象的属性设置为私有的或受保护的,但是对象的方法是公开的。在python里面实际上从语法上严格来讲没有保证对象属性和方法能够受私密保护,我们通常采用“隐喻”的方法:若希望属性是私有的,在属性名下用2个下划线作为开头。但其实如果你知道更换名字的规则,你也可以访问到该对象。以下2段代码可以对访问性做实例说明。

    class Test:
    def __init__(self, foo):   self.__foo = foo
    def __bar(self):#__bar将bar名字私有保护   print(self.__foo)   print('__bar') def main(): test = Test('hello') # AttributeError: 'Test' object has no attribute '__bar'出错 test.__bar() # AttributeError: 'Test' object has no attribute '__foo' print(test.__foo) if __name__ == "__main__": main()
    class Test:
        
        def __init__(self, foo):
            self.__foo = foo
            
        def __bar(self):
            print(self.__foo)#打印出hello
            print('__bar')#打印出__bar
            
    def main():
        test = Test('hello')
        test._Test__bar()
        print(test._Test__foo)#打印出hello
        
    if __name__ == "__main__":
        main()

    习题:定义一个类描述数字化的时钟如:00:00:00

    import time
    
    
    class Clock(object):
    
        def __init__(self, hour=0, minute=0, second=0):
            self._hour = hour
            self._minute = minute
            self._second = second
    
        def go(self):
            self._second += 1
            if self._second == 60:
                self._second = 0
                self._minute += 1
                if self._minute == 60:
                    self._hour += 1
                    self._minute = 0
                    if self._hour == 24:
                        self._hour = 0
    
        # 可以获得对象的字符串表示形式 当我们用print打印对象时会自动调用该方法
        def __str__(self):
            return '%02d:%02d:%02d' % (self._hour, self._minute, self._second)
    
       
    def main():
        #Clock参数有默认值,可以自己设置
        nowtime = Clock(12,25,56)
        while True:
            print(nowtime)
            nowtime.go()
            time.sleep(1)
    
    if __name__ == '__main__':
        main()

     习题:仿照上述习题,定一个倒计时器

    class Count_Down(object):
    
        def __init__(self,hour=1,minute=0,second=5):
            self._hour = hour
            self._minute = minute
            self._second = second
    
        def cut_time(self):
            if self._hour == 0 and self._minute==0 and self._second == 0:
                return False
            elif self._second == 0:
                if self._minute == 0:
                    self._hour -= 1
                    self._minute = 59
                    self._second =60
                else:
                    self._minute -= 1
                    self._second = 60
            self._second -= 1
            return True
    
        def show(self):
            return '%02d:%02d:%02d' % (self._hour, self._minute, self._second)
    
    def main():
        import time
        x = Count_Down()
        while x.cut_time():
            print(x.show())
            time.sleep(1)
        print('时间到了')
    if __name__ == '__main__':
        main()
  • 相关阅读:
    计算机基础总结
    Apache安装错误 APR not found解决方法
    一、编译错误
    2.2 进程控制之进程共享
    2.1 进程控制之fork创建子进程
    ARM串口控制终端命令
    u-boot、kernel、root系统烧写和挂载命令命令
    8.1 编写USB鼠标驱动程序,并测试
    八、USB驱动分析
    Source Insight的使用
  • 原文地址:https://www.cnblogs.com/bbszc520/p/8569900.html
Copyright © 2020-2023  润新知