python(四)模块,oop

模块

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

' a test module '

__author__ = 'Michael Liao'

import sys

def test():
    args = sys.argv
    if len(args)==1:
        print('Hello, world!')
    elif len(args)==2:
        print('Hello, %s!' % args[1])
    else:
        print('Too many arguments!')

if __name__=='__main__':
    test()
#第1行和第2行是标准注释,第1行注释可以让这个hello.py文件直接在Unix/Linux/Mac上运行,第2行注释表示.py文件本身使用标准UTF-8编码;
#第4行是一个字符串,表示模块的文档注释,任何模块代码的第一个字符串都被视为模块的文档注释;
#第6行使用__author__变量把作者写进去,这样当你公开源代码后别人就可以瞻仰你的大名;
#以上就是Python模块的标准文件模板,当然也可以全部删掉不写,但是,按标准办事肯定没错。
#后面开始就是真正的代码部分

#私有方法
def _private_1(name):
    return 'Hello, %s' % name

oop

#class后面紧接着是类名,即Student,类名通常是大写开头的单词,紧接着是(object),表示该类是从哪个类继承下来的
class Student(object):
    def __init__(self,name,score):
        self.name = name
        #访问限制为私有
        self.__score = score

    def print_score(self):
        print('%s %s' %(self.name,self.__score))

bart = Student('Bart Simpson',59)
lisa = Student('Lisa Simpson',87)
bart.print_score()
lisa.print_score()
bart.name='bart Simpson'
bart.print_score()

print(list)

#使用type()判断对象类型
type(abs)
type(12)
#使用isinstance()判断class的类型
isinstance('s',str)
#判断一个变量是否是某些类型中的一种
isinstance([1, 2, 3], (list, tuple))
#使用dir()获得一个对象的所有属性和方法,可以使用dir()函数,它返回一个包含字符串的list
print(dir('abc'))
#类似__xxx__的属性和方法在Python中都是有特殊用途的,比如__len__方法返回长度。在Python中,如果你调用len()函数试图获取一个对象的长度,
# 实际上,在len()函数内部,它自动去调用该对象的__len__()方法,所以,len('ABC')和 'ABC'.__len__()时等价的
len('ABC')
'ABC'.__len__()

#配合getattr()、setattr()以及hasattr(),我们可以直接操作一个对象的状态
class MyObject(object):
    def __init__(self):
        self.x=9
obj=MyObject()
print(hasattr(obj,'x')) # 有属性'x'吗?true
print(hasattr(obj,'y')) # 有属性'y'吗?false
setattr(obj, 'y', 19) # 设置一个属性'y'
print(hasattr(obj, 'y'))#有属性'y'吗?
print(getattr(obj,'y'))#获取属性'y'
print(obj.y)#获取属性'y'

#实力属性与类属性
#Python是动态语言,根据类创建的实例可以任意绑定属性。
#给实例绑定属性的方法是通过实例变量,或者通过self变量
class Student(object):
    def __init__(self, name):
        self.name = name

s = Student('Bob')
#给实例绑定属性
s.score = 90
#类属性
class Student1(object):
    name = 'Student'
s = Student1() # 创建实例s
print(s.name) # 打印name属性,因为实例并没有name属性,所以会继续查找class的name属性
print(Student.name) # 打印类的name属性
s.name = 'Michael' # 给实例绑定name
print(s.name) # 由于实例属性优先级比类属性高,因此,它会屏蔽掉类的name属性
print(Student1.name) # 但是类属性并未消失,用Student1.name仍然可以访问
del s.name # 如果删除实例的name属性
print(s.name) # 再次调用s.name,由于实例的name属性没有找到,类的name属性就显示出来了
发布了296 篇原创文章 · 获赞 70 · 访问量 55万+

猜你喜欢

转载自blog.csdn.net/feicongcong/article/details/85763545