• python面向对象编程实例解析


    1. 类和函数

    面向对象编程的例子:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    class Person(object):
    
        #在属性和变量的前面增加“__”就可以将该变量或者方法转换成私有变量,要访问私有变量可以添加方法访问
    
        def __init__(self,name,age):
            self.__name = name
            self.__age = age
        #定义获取用户信息的函数
        def print_info(self):
            print "%s:%s" %(self.__name,self.__age)
    
        #添加“get_Name”和“get_Age”方法获得属性
        def get_Name(self):
            return self.__name
        
        def get_Age(self):
            return self.__age
        
        
        #添加设置姓名的函数
        def set_Name(self,name):
            self.__name = name    
    
        #添加设置年龄的函数
        def set_Age(self,age):
            if(0< age <=200):
                self.__age = age
            else:
                raise ValueError("bad age!")

    需要注意的是,在Python中,变量名类似__xxx__的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量,所以,不能用__name____score__这样的变量名。

    有些时候,你会看到以一个下划线开头的实例变量名,比如_name,这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”。

    双下划线开头的实例变量是不是一定不能从外部访问呢?其实也不是。不能直接访问__name是因为Python解释器对外把__name变量改成了_Student__name,所以,仍然可以通过_Student__name来访问__name变量:

    >>> bart._Person__name
    'WYL'
    >>> 

    但是强烈建议你不要这么干,因为不同版本的Python解释器可能会把__name改成不同的变量名。

    总的来说就是,Python本身没有任何机制阻止你干坏事,一切全靠自觉。

    2. 继承和多态:

    python_class_test1.py文件:
    
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    
    #以下函数编写用于测试python中的类的继承和多态
    
    #编写一个Animal类,其中有一个run方法
    class Animal(object):
        def run(self):
            print "Animal is running..."
    
    #编写一个Cat和Dog类继承自Animal类
    class Cat(Animal):
        def run(self):
            print "Cat is running..."
        def eat(self):
            print "Cat is eating..."
    
    class Dog(Animal):
        def run(self):
            print "Dog is running..."
        def eat(self):
            print "Dog is eating..."
    
    
    test2.py文件:
    
    
    from python_class_test1 import Animal,Cat,Dog
    
    dog = Dog()
    cat = Cat()
    
    dog.run()
    dog.eat()
    cat.eat()
    cat.run()
    
    #a = list()
    #d = Dog()
    #c = Cat()
    #判断一个变量是否是某个类型可以用isinstance()判断:
    #print "判断dog是什么类型"
    #isinstance(d,Dog)
    #print "判断cat是什么类型"
    #isinstance(c.Cat)
    #isinstance(a,list)

    继承可以把父类的所有功能都直接拿过来,这样就不必重零做起,子类只需要新增自己特有的方法,也可以把父类不适合的方法覆盖重写;

    有了继承,才能有多态。在调用类实例方法的时候,尽量把变量视作父类类型,这样,所有子类类型都可以正常被接收;

    旧的方式定义Python类允许不从object类继承,但这种编程方式已经严重不推荐使用。任何时候,如果没有合适的类可以继承,就继承自object类。

  • 相关阅读:
    Json字串转换成Java复杂对象
    [Code Snipper]图片轮换
    将CSDN600W用户及密码帐号存入本地MySql数据库
    【转】一个隐形的java int溢出
    【转】展望未来,总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告
    如何在Android 4.0 ICS中禁用StatusBar | SystemBar | 状态栏 【完美版】
    【转】提问的智慧(How To Ask Questions the Smart)
    商业开发实战之VB篇精彩视频
    我的设计原语
    RAPIDXML 中文手册,根据官方文档完整翻译!
  • 原文地址:https://www.cnblogs.com/blogofwyl/p/4308524.html
Copyright © 2020-2023  润新知