Python基础
面向对象编程
面向对象编程最重要的概念就是类和实例。在面向对象技术主要有一下概念需要掌握:
- 类(class):用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。定义类是通过
class
关键字来定义的格式如下:
class 类名(object):
内容
对于(object)
表示的是从哪个类继承下来的
- 方法:类中所定义的函数,也就是在类的内部编写的函数就叫方法,这与Java中的概念是一样的。
- 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
- 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
- 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
- 局部变量:定义在方法中的变量,只作用于当前实例的类。
- 实例变量:在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用 self 修饰的变量。
- 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。
- 实例化:创建一个类的实例,类的具体对象。
- 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
类的创建
以上名词都是面向对象编程中出现的,学过Java的人应该都不陌生。
我们举一个用类的例子:
# 创建类MyClass
class MyClass:
i=123
#下面定义类中的方法
def f(self):
return "hello world"
#实例化类
x=MyClass()
#访问类中的属性和方法
print("MyClass类的属性i为:",x.i)
print("MyClass类中的方法:",x.f())
------------------------
MyClass类的属性i为: 123
MyClass类中的方法: hello world
构造方法
Java中有构造方法而在Python中也一样类中有一个名为__init__()
的构造方法,该方法在实例化时会自动调用。举个例子:
class Student:
def __init__(self,name,score):
self.name=name
self.score=score
su=Student("su",99)
print("姓名:",su.name)
print("成绩:",su.score)
---------------------
姓名: su
成绩: 99
数据封装
Java中的数据封装使用Get
和set
方法利用get和set方法来让创建的对象获得属性值。举个例子:
class Student:
def __init__(self,name,score):
self.name=name
self.score=score
def print_score(self):
print("%s : %s" % (self.name,self.score))
su=Student("su",99)
su.print_score()
----------------------------
su : 99
在Java中类中的属性如果不加private
那就是默认public
也就是外面其他的类可以访问,当变成私有变量时就能保证属性的安全了。在Python中也有类似于private
用法的,而在Python中的用法就是在属性名称前加上两个下划线__
,所以在Python中变量名如果以__
开头,那么他就是一个私有变量,只有内部可以访问,外部不能访问。
和Java一样利用类似于get
和set
方法进行对私有变量进行封装,如下:
class Student:
def __init__(self,name,score):
self.__name=name
self.__score=score
def set_score(self,score):
self.__score=score
def set_name(self,name):
self.__name=name
def get_score(self):
return self.__score
def get_name(self):
return self.__name
def print_ob(self):
print("%s : %s" % (self.__name,self.__score))
su=Student("su",99)
print("姓名: ",su.get_name())
print("成绩: ",su.get_score())
su.print_ob()
-------------------------
姓名: su
成绩: 99
su : 99
双下划线特殊变量
需要注意,在Python中如果变量名类似于双下划线开始双下划线结束的:__xxx__
,那么是特殊变量,特殊变量是可以直接访问的,所以不要用__xxx__
这样的变量名
继承和多态
继承
与Java语言一样在类中也有继承,而继承也就是面向对象编程的特点,也就是子类继承了父类中的一些方法,例如:
# 首先定义一个父类如人
class People():
def study(self):
print("在学习...")
# 定义子类 如中国人
class Chinese(People):
pass # 直接跳过
gq=Chinese()
gq.study()
-------------------------
在学习...
继承也就是子类拥有了父类中的方法
对于类来说也可以继承多个父类
class People():
def study(self):
print("在学习...")
class YellowRace():
def eat(self):
print("在吃饭..")
# 定义子类 如中国人
class Chinese(People,YellowRace): #注意多继承的使用方法
def study(self):
print("中国人在学习....")
def run(self):
print("中国人在跑...")
gq=Chinese()
gq.study()
gq.run()
gq.eat()
---------------------
中国人在学习....
中国人在跑...
在吃饭..
多态
# 首先定义一个父类如人
class People():
def study(self):
print("在学习...")
# 定义子类 如中国人
class Chinese(People):
def study(self):
print("中国人在学习....")
def run(self):
print("中国人在跑...")
gq=Chinese()
gq.study()
gq.run()
-----------
中国人在学习....
中国人在跑...
从上面的例子中我们知道子类中同样定义了study()方法,运行后执行的是子类的方法也就是说子类的study方法覆盖了父类的study方法,而这也就是我们要说的多态