• 面向对象


    面向对象

    1)self

    类中的函数第一个参数必须是self, self 是为了指代它所存在的类Class之中。

    比如我们如果有好几个不同的obj被创建成同一个类,

    那么有了self,我们的class Foo就能很好的知道哪个指的是自己,不会乱

    所以说,这个 self 就是个代指。代指了自己所在的class。你可以由 self 点进所指class本身的函数。由此可见,self 本身作为一个代词,并不一定要叫self。你也可以用个其他什么来代替。只不过,必须得是这个类的所有子方法的第一个参数:

    2)访问控制

    如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问

    class Student:

        def __init__(self, name, age):

            self.__name = name

            self.__age = age 

    def detail(self):

            print(self.__name)

            print(self.__age)

    LiLei = Student('LiLei', 12)

    LiLei.__age = 20

    LiLei.detail()

    >> 

    LiLei

    12

    3)一些方法

    dir():

    如果要获得一个对象的所有属性和方法,可以使用dir()函数,它返回一个包含字符串的list,比如,获得一个str对象的所有属性和方法

    getattr()、setattr()以及hasattr():

    我们可以直接操作一个对象的状态:

    hasattr(obj, 'x') #有木有属性'x'

    setattr(obj, 'y', 19) # 设置一个属性'y'

    getattr(obj, 'y') # 获取属性'y'

    getattr(obj, 'z', 404) # 获取属性'z',如果不存在,返回默认值404

    4)实例属性和类属性

    实例属性:

    class Student(object):

        def __init__(self, name):

            self.name = name

    s = Student('Bob')

    s.score = 90

    类属性:

    class Student(object):

        name = 'Student'

    s = Student() # 创建实例s

    print(s.name) # 打印name属性,因为实例并没有name属性,所以会继续查找class的name属性

    s.name = 'Michael' # 给实例绑定name属性

    print(s.name) # 由于实例属性优先级比类属性高,因此,它会屏蔽掉类的name属性

    总结:

    1、实例属性可以通过动态添加,而类属性是在创建类的时候已经添加好了

    2、从上面的例子可以看出,在编写程序的时候,千万不要把实例属性和类属性使用相同的名字,因为相同名称的实例属性将屏蔽掉类属性,但是当你删除实例属性后,再使用相同的名称,访问到的将是类属性。

  • 相关阅读:
    在MonoTouch中自定义表格 狼人:
    Android开发进阶:如何读写Android文件 狼人:
    Windows Phone 7 开发之:工具栏 狼人:
    Android平台Qt开发入门教程 狼人:
    PySide中的信号和槽 狼人:
    sql server 2005 通过代理定时备份数据库
    Java I/O流操作(三)File文件操作及打印流和序列流合并流
    分别介绍以下数据提供者连接各种数据库的方法 (vb.net)
    OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波
    软件架构设计之Utility模块——string
  • 原文地址:https://www.cnblogs.com/yongfuxue/p/10036737.html
Copyright © 2020-2023  润新知