PythonDay09—模块、面向对象编程

导读:本篇文章讲解 PythonDay09—模块、面向对象编程,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

Python之模块

一、模块

1.模块简介

说明:在Python中,一个.py文件就称之为一个模块(Module)。
好处:
(1)提高了代码的可维护性。
(2)编写代码不必从零开始,可以引用其他模块
注意:自己创建模块时要注意命名,不能和Python自带的模块名称冲突。例如,系统自带了sys模块,自己的模块就不可命名为sys.py,否则将无法导入系统自带的sys模块。同时,要遵循Python变量命名规范,不要使用中文、特殊字符
分类:
(1)自带模块
(2)第三方模块
(3)自定义模块

二、面向对象编程

1.类与实例

eg:

class Student(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def informationOfStu(self):
        print('{}现在{}岁!'.format(self.name, self.age))
        return
        
s = Student('wanhao', 18)
s.informationOfStu()

#结果:
wanhao现在18岁!

说明:参数object是表示继承的接口是object,函数__init__()相当于Java中的构造函数。类中的每个方法(包括构造函数)的第一个参数都必须是self ,否则会报错:TypeError: XXX() takes 3 positional arguments but 4 were given
注意:注意:特殊方法“init”前后分别有两个下划线!!!
如何判断一个变量是否是一个类的实例?
isinstance()函数来判断:
eg:

class Student(object):
    def __init__(self, name, age):
        self.__name = name
        self.__age = age
    def informationOfStu(self):
        print('{}现在{}岁!'.format(self.name, self.age))
        return
        
s = Student('wanhao', 18)
print(isinstance(s, Student))
#结果:
True

2.访问权限

python中变量和方法的访问权限有三种:公有、受保护、私有。
公有:变量命
受保护:_变量命
私有:__变量命__
实际上共有和受保护只是形式上有一点不同,公有是正常命名,受保护的是_变量命,即在变量命前加上_,在其他方面完全一样(包括内部机制)。这种做法并不是语法上的规则,单下划线开头的属性和方法外界仍然是可以访问的,所以更多的时候它是一种暗示或隐喻,告诉程序员要小心操作。

说明:如果类的全局变量不定义为私有属性,则在外部能够更改类的内部属性
eg:

class Student(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def informationOfStu(self):
        print('{}现在{}岁!'.format(self.name, self.age))
        return
        
s = Student('wanhao', 18)
print(s.name)
s.name = 'li'
print(s.name)

#结果:
wanhao
li

如果我们想把类的属性定义为私有属性,则在引入变量时,在变量的前面加上两个下划线__,这样表示私有(其他位置的变量也是如此)
注意:在Python中,变量名类似__xxx__的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量,所以,不能用__name____age__这样的变量名。
eg:

class Student(object):
    def __init__(self, name, age):
        self.__name = name
        self.__age = age
    def informationOfStu(self):
        print('{}现在{}岁!'.format(self.name, self.age))
        return
        
s = Student('wanhao', 18)
print(s.__name)

#结果:
AttributeError: 'Student' object has no attribute '__name'

如果想得到或者修改类的私有属性,可以像Java一样编写get()set()函数。

多说一嘴,Python并没有从语法上严格保证私有属性或方法的私密性,它只是给私有的属性和方法换了一个名字来“妨碍”对它们的访问,事实上如果你知道更换名字的规则仍然可以访问到它们,下面的代码就可以验证这一点。

class Student:
    def __init__(self, name):
        self.__name = name
        
    def run(self):
        print('{} is running!'.format(self.__name))
        
if __name__ == '__main__':
    s = Student('ZhangSan')
    print(s._Student__name)
    s.run()

# 结果:
ZhangSan
ZhangSan is running!

可以看见,其只是将__name改成了_Student__name

3.继承和多态

继承语法:新定义的类的参数就是该类要继承的类
(1)python中的继承和Java中的继承大体一样,都可以继承父类的所有方法。不同的类继承同一个父类,重写父类方法,这样,从而由继承导致了多态。
(2)python与Java在继承方面的不同点:假设Animal类有run()方法)
对于静态语言(例如Java)来说,如果需要传入Animal类型,则传入的对象必须是Animal类型或者它的子类,否则,将无法调用run()方法。
对于Python这样的动态语言来说,则不一定需要传入Animal类型。我们只需要保证传入的对象有一个run()方法就可以了。(也就是要有方法能够被重写)

4.实例类属性和类属性

(1)实例属性
说明:由于Python是动态语言,可以通过实例变量,或者通过self变量添加实例的属性。
(2)类属性
说明:类具有的属性。像Java一样在类中定义的属性。
eg:

class Student(object):
    age = 18 			#类属性
    def __init__(self, name, age):
        self.name = name  #self作用的变量name虽然每个类的实例都具有该属性,但是,它还是不属于类属性,属于实例属性
        
s = Student('wanhao', 18)
print(s.name)
print(s.age)
s.scoer = 100               #scoer是实例属性
print(s.scoer)
print(Student.name)	
    
#结果:
wanhao
18
100
AttributeError: type object 'Student' has no attribute 'name'   #可见name不是类属性

注意:在编写程序的时候,千万不要对实例属性和类属性使用相同的名字,因为相同名称的实例属性将屏蔽掉类属性,但是当你删除实例属性后,再使用相同的名称,访问到的将是类属性。

5.对self做简单的解释

self相当于Java中的this,它代表的是类的实例化对象。

class Animal(object):
    def run(self):
        print(self)
        print("I am running!")
t = Animal()
t.run()
Animal.run(t)

# 结果:
<__main__.Animal object at 0x000002359237D160>
I am running!
<__main__.Animal object at 0x000002359237D160>
I am running!

通过以上代码可以看见,t.run()Animal.run(t)是完全等价的两种方法,事实上,在执行的过程中,是将t.run()转换为Animal.run(t)语句执行的,可以看见Animal.run(t)需要传一个参数,而传的这个参数就是实例化对象。所以,对于每个类中的方法,第一个参数都是self。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/84816.html

(0)

相关推荐

半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!