面向对象

os.system 输出命令结果到屏幕,返回命令执行状态

os.popen("dir").read()    #会保存命令的执行结果输出

 

subprocess模块  (从python 3.5开始才有下面的run()方法)

>>> import subprocess
>>> subprocess.run("df -h | grep xvda1",shell=True)
/dev/xvda1       40G  5.7G   32G  16% /
CompletedProcess(args='df -h | grep xvda1', returncode=0)

 

#接收字符串格式命令,返回元组形式,第1个元素是执行状态,第2个是命令结果
>>> subprocess.getstatusoutput("ls /bin/ls")
(0, '/bin/ls')

 

>>> res=subprocess.Popen("sleep 10;echo 'hello'",shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
>>> res.stdout.read()  
b'hello\n'
>>> res.poll()  
0

 

面向对象编程  object  oriented programing

类的特性:

封装

  1.防止数据被随意修改

  2.使外部程序不需要关注对象内部的构造,只需要通过此对象

  对外提供的接口进行直接访问即可

继承

  通过父类 -》子类 的方式以最小代码量的方式实现 不同角色的共同点和不同点

 

多态

  简单点说:“一个接口,多种实现”,指一个基类中派生出了不同的子类,且每个子类在继承了同样的方法名的同时又对父类的方法做了不同的实现,这就是同一种事物表现出的多种形态。

 

类的定义

class Dog(object):

    def __init__(self,name):  #构造函数,构造方法=初始化方法
        self.NAME = name    # d.NAME = name
    
    def sayhi(self):  #类的方法
        print("hello, i am a dog. my name is ",self.NAME)   # self.NAME 相当于d.NAME
d = Dog("lichuang") # Dog(d,"lichuang") d 传给了 __init__函数 里面self d.sayhi() # d.sayhi(d) d 传给了sayhi函数中的self


#hello, i am a dog. my name is  lichuan

上面的d是实例化后产生的对象  ,叫实例,当前类的实例

self是d ,所以self 就是实例本身

 

类 --》 实例化 --》实例对象

__init__ 构造函数

self.name = name    #属性,成员变量

def.sayhai()   #方法

 

私有属性

#类定义
class people:
    #定义基本属性
    name = ''
    age = 0
    #定义私有属性,私有属性在类外部无法直接进行访问
    __weight = 0
    #定义构造方法
    def __init__(self,n,a,w):
        self.name = n
        self.age = a
        self.__weight = w
    def speak(self):
        print("%s 说: 我 %d 岁。" %(self.name,self.age))
 
# 实例化类
p = people('runoob',10,30)
p.speak()
View Code

__weight = 0      #定义私有属性,私有属性在类外部无法直接进行访问

def  get_heart(self):   #对外部提供只读访问接口

  return  self.__heart

r1._Role__heart    #强制访问私有属性

 

公有属性

 在类里直接定义的属性即使公有属性

class Role(object):
    nationality = "JP"  #公有属性
    def __init__(self, name, role, weapon, life_value=100, money=15000):
        self.name = name
        self.role = role
        self.weapon = weapon
        self.life_value = life_value
        self.money = money
        self.__heart = "Normal"

    def shot(self):
        print("%s is shooting..." % self.name)

    def got_shot(self):
        print("ah...,I got shot...")
        self.__heart = "Die"

r1 = Role('haitao', '警察', 'B22')
r2 = Role('Jack', '警犬', 'B13')
print(r1.weapon)

print(r1.nationality)
print(r2.nationality)
View Code

 

类的继承:


class Person(object):
def __init__(self,name,age):
self.name = name
self.age = age
def talk(self):
print("person is talkig... ")
class WhitePerson(Person):
pass
class BlackPerson(Person):
def __init__(self,name,age,strength): #先覆盖,在继承,再加新功能
super(Person,self).__init__(name,age)
self.strength = strength
def talk(self):
print("black person is blaba")
def walk(self):
print("is walking")
 

 类的继承2:

class SchoolMember(object):
    '''学校成员基类'''
    member = 0
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex
        self.enroll()  #每次自动调用
        
    def enroll(self):
        '''注册'''
        print("just enrolled a new school member [%s]" % self.name)
        SchoolMember.member +=1

    def tell(self):
        print("-----info:%s-----" %self.name)
        for k,v in self.__dict__.items():
            print("\t",k,v)
        print("------end------")
    def __del__(self):  #析构函数
        print("开除了[%s]..." % self.name)
        SchoolMember.member -= 1

class Teacher(SchoolMember):
    '''讲师类'''
    def __init__(self,name,age,sex,salary,course):
super(Teacher,self).__init__(name,age,sex) self.salary
= salary self.course = course def teaching(self): print('Teacher [%s] is teaching [%s]' %(self.name,self.course)) class Student(SchoolMember): def __init__(self,name,age,sex,course,tuition): SchoolMember.__init__(self,name,age,sex) self.course = course self.tuition = tuition self.amount = 0 def pay_tuition(self,amount): print("student [%s] has just paied [%s]" %(self.name,amount)) self.amount +=amount t1 = Teacher("wusir",28,"F*M",3000,"python") s1 = Student("haitao",38,"N/A","PYS15",30000) s2 = Student("lichuang",12,"M","PYS15",11000) t1.tell() s1.tell() print(SchoolMember.member) del s2 print(SchoolMember.member) ############################################################# just enrolled a new school member [wusir] just enrolled a new school member [haitao] just enrolled a new school member [lichuang] -----info:wusir----- name wusir age 28 sex F*M salary 3000 course python ------end------ -----info:haitao----- name haitao age 38 sex N/A course PYS15 tuition 30000 amount 0 ------end------ 3 开除了[lichuang]... 2 开除了[wusir]... 开除了[haitao]...

 

经典类 vs 新式类

#SchoolMember.__init__(self,name,age,sex)  #经典类写法
super(Teacher,self).__init__(name,age,sex)  #新式类写法

 

多继承时 继承顺序的区别

  Python3 里面都是广度查询

 

posted @ 2017-09-12 09:00  _Cohen  阅读(149)  评论(0)    收藏  举报