zoukankan      html  css  js  c++  java
  • 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类。

  • 相关阅读:
    PHP安全编程:更优的会话数据安全 更好地防范session暴露(转)
    PHP安全编程:会话数据注入 比会话劫持更强大的攻击(转)
    小菜学习设计模式(四)—原型(Prototype)模式
    小菜学习设计模式(三)—工厂方法(Factory Method)模式
    从头学习设计模式(一)——单例模式
    javascript Date format(js日期格式化)
    您尝试打开的文件的格式与文件扩展名指定的格式不一致
    C# foreach 中获取索引index的方法
    C# DateTime日期格式化
    oracle的常用函数 instr() 和substr()函数
  • 原文地址:https://www.cnblogs.com/blogofwyl/p/4308524.html
Copyright © 2011-2022 走看看