Python学习——静态方法、类方法、属性方法

import os
# os.system()
# os.mkdir()

class Dog(object):
    # name = 'kk'
    def __init__(self,name):
        self.name = name

#    @staticmethod #静态方法,实际上跟类没什么关系了,并且,这个不会主动传self参数的。
#    @classmethod #类方法,能够调用self参数了,但是不能够调用实例化的变量。
    @property #静态属性,不能传入参数了,只能自己调用类或者实例里面的属性。
    def eat(self):
        print("%s is eating %s" %(self.name,'dd'))

    def talk(self):
        print("%s is talking"% self.name)
d = Dog("ChenRonghua")
d.eat

d.talk()


变量
类变量
实例变量
私有变量
方法
构造函数
析构函数
私有方法

对象
实例化的一个类后得到一个对象

封装
将某些功能的实现细节隐藏

继承
重复使用代码
单继承(最多)
多继承
2.7中经典类,为深度优先
3.0以后的新式类是广度优先

多态
一个接口,多种实现



静态方法 @staticmethod #静态方法
只是名义上归于类来管理,但是实际上在静态方法里面没有办法访问类或者实例里面的任何属性

类方法 @classmethod #类方法
只能访问类变量,不能访问实例变量


属性方法 @property #静态属性
把一个方法变成静态属性。可以通过 方法名.setter 和 方法名.deleter 的方法进行改动和删除。


反射
hasattr(obj,name_str) , 判断一个对象obj里是否有对应的name_str字符串的方法
getattr(obj,name_str), 根据字符串去获取obj对象里的对应的方法的内存地址
setattr(obj,str,value), is equivalent to ``x.y = v''
delattr


动态导入模块 #用来导入字符串的形式

动态导入模块方法1: __import__

说明:

  1. 函数功能用于动态的导入模块,主要用于反射或者延迟加载模块。

  2. __import__(module)相当于import module

举例说明:

首先创建一个模块目录lib,然后在目录内创建一个模块为:aa.py

模块代码为:

class c(object):
def __str__(self):
return 'C language'
在lib目录平级新建一个测试的模块,使用 __import__ 动态以字符串形式导入lib下的aa模块。

lib = __import__('lib.aa') # 相当于import lib
c = lib.aa.c()
print(c)
动态导入模块方法2:import importlib

实例还是上面的lib.aa模块,这里使用importlib进行动态导入(这个方法好理解,也是官方建议使用的)

import importlib
aa = importlib.import_module('lib.aa') #直接导入到了aa级别了,然后直接使用aa.属性名 就可以使用了
c = aa.c() #这样更方便
print(c)

异常
try :
code
except (Error1,Erro2) as e:
print e

except Exception :抓住所有错误,不建议用

断言 assert
类似于if 但是,其作用就是相当后续程序执行前的必备检查。
不同于if 的地方就是,if不会对检查判断,同时assert后续的程序不需要缩进。
posted @ 2018-02-18 19:49  Ian_learning  阅读(205)  评论(0编辑  收藏  举报