这是我的第二篇博客,本来想单纯只记录NPL自然语言学习过程。但今天复习Python3发现自己在Python语言方面还是有很多不足的,就比如面向对象这方面(主要是当初学java时候这部分没有认真学~),所以想再把这部分内容重新拾起来,本人也是新手,不足之处请大家多多指教哦。
面向对象设计,说白了就是把现实世界是实体映射成计算机世界中的对象,把现实世界中的实体为概念世界中的抽象类,把概念世界中的抽象数据类映射为计算机世界中的类!在计算机世界中,类是对象的抽象,而对象是类的实例化。在现实世界、概念世界、计算机世界中,类与对象的映射关系如下图所示:
类是用来描述具有相同的属性和方法的对象的集合。在Python中使用class关键字构造类,并在类中定义属性和方法。通常可以理解为类是对象的模板,对象是类创建出来的产品,对象是类的实例。其一般说明类语法如下:
class 类名 :
属性定义 #变量定义
方法定义 #函数定义
1、定义类的关键字为‘class’,类名通常是第一个字母大写。
2、对象的定义通过使用类名后跟一对圆括号来创建。
3、类具有属性和方法。
class Person: #使用class说明类
name = "恰巧偶遇" #类属性
age = 21 #公有属性
def hello(self): #定义hello类方法
print('hello,how are you?')
print(Person.name)
print(Person.age) #通过类直接调用类属性
p = Person() #创建类对象p
p.hello() #通过对象调用类方法
对象是通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。其支持属性引用和实例化两种操作。
p = Person() #创建类对象p
print(p.name) #通过对象p调用属性
print(Person.age) #通过类直接引用属性
类属性是在类中方法之外定义的属性,又分为公有属性和私有属性,他们以属性命名来区分的,比如在属性前面加入两个下划线’__'表示私有属性,否则表示公有属性。
1、公有属性有两种访问方法分别为通过类名和实例对象来访问。
2、私有属性不能在类外通过类名和对象名来访问
class People:
name = '恰巧偶遇' #类的公有属性
__age = '21' #类的私有属性
p = People() #创建类对象
print(p.name) #正确
print(People.name) #正确
print(p.__age) #错误,在类外调用私有属性
print(People.__age) #错误,在类外调用私有属性
对象方法和类属性是类似的,同样分为公有和私有其通过命名方式区分。如果在方法名前加两个下划线’__’,表示为私有方法,否则为公有方法。而对象方法和普通方法只有一点不同,对象方法必须有一个额外的第一个参数名称self。
1、公有方法通过类名和对象名来调用。
2、私有方法不可在类外调用,只能在对象公有方法中通过self调用。
class People:
def sayHi(self):
print("hello zhl")
def __getHi(self):
print("hello lyc")
def output(self):
self.__getHi()
p = People() #创建类对象
p.sayHi() #正确
p.__getHi() #错误,类外直接调用私有方法
p.output() #正确,通过公有方法调用私有方法
__init__方法作为Python的一种特殊方法,方法名的开始和结束都是双下划线,该方法称为构造函数,一般我们用来为属性设置初始值的,每次创建类实例的时候都会先自动执行构造函数,为对象分配内存。注意该方法的第一个参数永远都是self,这表示创建的实例本身。
class People:
def __init__(self, name):
self.name = name
def sayHi(self):
print("hello, my name is ", self.name)
p = People("zhl") #创建类对象
p.sayHi()
析构函数的方法名为__del__, 它是用来释放对象占用的资源,完成内存清理工作的,析构函数又称为垃圾收集器。
class Cat:
def __init__(self, num):
self.num = num
print("number is", self.num, 'object is born...')
def __del__(self): #析构函数
print("number is", self.num, 'object is born...')
cat1 = Cat(1) #创建类对象
cat2 = Cat(2) #创建类对象
del cat1
del cat2
继承性是通过派生类和基类实现的,被继承的基类又称为父类或者超类,而新类称为子类或派生类。
1、Python类继承时,基类的构造方法不会被调用。
2、调用基类的方法,需要加上基类的名称作为前缀,带上self参数。
3、在类中调用普通函数时不需要带上self参数
class Zhl:
def get(self):
print("I'm Zhl")
class Lyc(Zhl):
print("I'm Lyc")
c = Lyc() #输出I'm Lyc
c.get() #调用父类方法,输出 I'm Zhl
编写人员类(Person),该类具有名字(name)、年龄(Age)、性别(Sex)等属性,通过对Person类的继承得到教师类(Teacher),该类能够存放教师的职称、学历、工资、奖金等信息,并能计算出总收入(工资+奖金)。
class Person:
def __init__(self,Name,Age,Sex):
self.Name = Name
self.Age = Age
self.Sex = Sex
class Teacher(Person):
sum = 0
def __init__(self,Name,Age,Sex,Title,Qual,Salary,Prize):
self.Name = Name
self.Age = Age
self.Sex = Sex
self.Title = Title
self.Qual = Qual
self.Salary = Salary
self.Prize = Prize
def p(self):
print("Name:", self.Name)
print("Age:", self.Age)
print("Sex:", self.Sex)
print("Title:", self.Title)
print("Qual:", self.Qual)
print("Salary:", self.Salary)
print("Prize:", self.Prize)
def count(self):
sum = self.Salary+self.Prize
print('sim is:', sum)
teacher = Teacher('Zhl', 20, 'male', 'professor', 'doctor', 9900, 6600)
teacher.p()
teacher.count()