• 1 类和实例


    类和实例

    属于类级别的变量,在使用时一定要带上类型名称,比如MyClass.count;

    属于每个对象级别的变量,在调用时一定要带上self表明属于当前对象,比如self.name。

    类和实例的使用

    class MyClass:
        count = 0
        name = "DefaultName"
        
        def __init__(self, name):
            self.name = name
            print("类的变量名是%s
    对象的变量是%s" % (MyClass.name, self.name))
        
        def setCount(self, count):
            self.count = count
        
        def getCount(self):
            return self.count
        
    
    if __name__ == "__main__":
        cls = MyClass("lisi")
        cls.setCount(20)
        print("count = %d" % cls.getCount())

    __init__方法属于Python语言的构造函数,一个类只能有一个__init__方法,用于初始化类及其变量。

    通过对象的setCount()、getCount()函数处理它的变量。

    类的属性和方法

    类的方法:在类的内部可以使用def关键字定义一个方法。与一般函数不同,类的方法必须包含参数self,且为第一个参数。

    类的私有方法:在类的内部使用,命名格式为__private_method。私有方法以两个下划线开头,声明该方法为私有的,不能在类的外部调用,只能在类的内部调用,比如self.__private_methods。

    类的私有属性:在类的内部使用,命名格式为__private_attrs。私有属性以两个下划线开头,声明该属性为私有的,不能在类的外部调用,只能在类内部的方法中使用,比如self.__private_attrs。

    类的属性和方法的使用

    class MyCounter:
        __secretCount = 0  # 私有变量
        publicCount = 0  # 公共变量
        
        def __privateCountFun(self):
            print("这是私有方法")
            self.__secretCount += 1
            self.publicCount += 1
            print(self.__secretCount)
            
        def publicCountFun(self):
            print("这是公共方法")
            self.__privateCountFun()
            
            
    if __name__ == "__main__":
        counter = MyCounter()
        counter.publicCountFun()
        counter.publicCountFun()
        print("instance publicCount=%d" % counter.publicCount)
        print("Class publicCount=%d" % MyCounter.publicCount)

    从上面的代码可以看出:

      可以在类的内部调用私有方法,不能在类的外部调用。

      可以在类的内部访问私有属性,不能在类的外部访问。

      对象属性类型的声明。

    Python的一大特色就是无须声明类型变量,它会自动判断。

    类的动态属性

    如果不希望类的某属性被悄悄地访问、赋值或修改,希望在被访问、赋值或修改时能得到一些通知,那么可以使用函数property()。函数原型是:

    property([fget[, fset[, fdel[, doc]]]])

    它返回新式类(继承了object的类)的一个属性,其中fget是属性被访问时执行的方法,fset是属性被赋值时执行的方法,fdel是属性被删除时执行的方法。

    下面代码定义了一个MyClass类,该类必须继承自object类,它有一个私有变量_param。

    方法一:使用类的属性

    class MyClass(object):
        def __init__(self):
            self._param = None
            
        def getParam(self):
            print("get param: %s" % self._param)
            return self._param
            
        def setParam(self, value):
            print("set param: %s" % self._param)
            self._param = value
            
        def delParam(self):
            print("del param: %s"% self._param)
            del self._param
            
        param = property(getParam, setParam, delParam)
        
        
    if __name__ == "__main__":
        cls = MyClass()
        cls.param = 10
        print("current param: %s" % cls.param)
        del cls.param

    在访问对象属性param时,对应执行了property(getx, setx, delx)所指定的方法而做了一些额外的事情

    方法二:使用@property访问类的属性

    同方法一,首先定义了一个MyClass类,该类必须继承自object类,它有一个私有变量_param。@property可以将Python定义的函数“当作”属性访问,从而提供更加友好的访问方式,但是有时候setter/getter也是需要的。

    class MyClass(object):
        def __init__(self):
            self._param = None
        
        @property
        def param(self):
            print("get param: %s" % self._param)
            return self._param
        
        @param.setter
        def param(self, value):
            print("set param: %s" % self._param)
            self._param = value
        
        @param.deleter
        def param(self):
            print("del param: %s"% self._param)
            del self._param
        
        
    if __name__ == "__main__":
        cls = MyClass()
        cls.param = 10
        print("current param: %s" % cls.param)
        del cls.param

    方法二的效果同方法一,但是方法二更加灵活、简单,在开发中经常使用。

  • 相关阅读:
    python-序列化与反序列化(loads、load、dumps、dump)
    STM32命名
    批处理参考
    Delphi通过管道执行外部命令行程序(cmd)并获取返回结果
    ubuntu使用备忘
    ubuntu14.04中安装QuartusII9.1步骤
    删除选中数据
    DBGridEh基本操作
    sqlserver 字符串函数
    使用 Delphi Xe 的 TDictionary
  • 原文地址:https://www.cnblogs.com/lynsha/p/13396960.html
Copyright © 2020-2023  润新知