文章目录
- 一、类和对象
- 1、对象属性的默认值设置
- 2、对象属性的添加、修改与删除
- 3 、类属性
- 二、类的继承
引言:面向对象编程时一门编程语言重要的功能,我们之前所学的 c++,java都为面向对象编程语言,这里给大家拓展一下,静态编程语言与动态编程语言;
(1)静态编程语言(编译型语言):静态类型语言是在运行前编译时检查类型。在写代码时,没声明一个变量必须指定类型。如:java,c++,C语言
等等。
(2)动态类型语言(解释型语言):在运行期间检查数据的类型的语言。用这类语言编程,不会给变量指定类型,而是在附值时得到数据类型。如:Python和ruby就是典型动态类型语言。很多脚本语言javascrīpt,javascrīpt也是这类语言。
一、类和对象
我们来创建一共Person类,看下方代码:
#定义类,这里注意类目需要首字母大写,用于缺乏其他函数
class Person:
def __init__(self) : #这里是初始化函数,等同于c++和java里面的构造函数
self.name="韩信" #self.name是访问本对象的name,即为每个类里面的属性
self.gender='男'
self.age=20
print("An instance created!")
# 代码实例化
p1=Person() #创建p1对象
print(p1.name)
print(p1.gender)
print(p1.age)
注意:
(1)这里的初始化函数的格式为固定模式:def __init__(self):
;
(2)括号里面的self
是相当于类里面的指针,相似c++里面的this
指针,必须要写在里面,如果要在初始化函数形参里面添加其他参数时,即为在self
后面加上参数名即可。
1、对象属性的默认值设置
看下面代码:
def __init__(self,name,gender='男',age=20) :
self.name="韩信"
self.gender='男'
self.age=20
print("An instance created!")
这里可以如果无实参的话,则按照默认值输出;
来看一段完整代码:
#定义类,这里注意类目需要首字母大写,用于区别其他函数
class Person:
def __init__(self,name,gender='男',age=20) :
self.name='韩信'
self.gender=gender
self.age=age
print("An instance created!")
def say(self):#这里需要注意,此功能为输出,则里面仍然要有self参数在里面,便于此函数下面的变量调用
print('%s, 性别为 %s,年龄为%d。' %(self.name,self.gender,self.age))
# 代码实例化
p1=Person('韩信','man')
p1.say()
运行如下:
Person
里面的若给出实参,则覆盖形参给的默认值,否则就直接输出默认值;
2、对象属性的添加、修改与删除
#定义类,这里注意类目需要首字母大写,用于区别其他函数
class Person:
def __init__(self,name,gender='男',age=20) :
self.name='韩信'
self.gender=gender
self.age=age
print("An instance created!")
def say(self):
print('%s, 性别为 %s,年龄为%d岁,体重为%d,。' %(self.name,self.gender,self.age,self.weight))
# 代码实例化
p1=Person('韩信','man')
p1.age=60 #修改
p1.weight=70 #添加
p1.say()
这里我们并没有在初始化函数中加入参数,而是直接在实例化处通过对象来添加,修改;
现在来看一下删除会显示什么效果?
# 代码实例化
p1=Person('韩信','man')
p1.weight=60
del p1.weight
p1.say()
这里显示属性异常,查不到此参数。
3 、类属性
类似其他语言,在python中也有公、私有属性,那么在python语言中如何表示呢?还是public
和private
吗?
我们这里将name
属性,进行私有化处理,我们在类外在此通过访问时候,即为报错(AttributeError
).
大家可以看到箭头处,通过在属性名前面加上"__
"(注意,这里是在英文模式的两条下划线),这样子就把name
属性变成私有属性,当然如果不加,则为公有属性。
二、类的继承
面向对象编程的主要好处之一是可以实现代码的重用,代码重用的方法之一就是继承。
来看个例子:
#定义类,这里注意类目需要首字母大写,用于区别其他函数
class Person:
def __init__(self,name,gender,age) :
self.name=name
self.gender=gender
self.age=age
def say(self):
print('%s, 性别为 %s,年龄为%d岁.' %(self.name,self.gender,self.age))
class Son(Person): #格式为 ‘def 子类名(父类名):’
def __init__(self,name,gender,age,weight) :
Person.__init__(self,name,gender,age)
self.weight=weight
def say(self): #对代码的重写
print('%s, 性别为 %s,年龄为 %d 岁,体重为 %d kg.' %(self.name,self.gender,self.age,self.weight))
# 代码实例化
p1=Person('韩信','男',20)
p2=Son("貂蝉","女",20,60)
p1.say()
p2.say()
这里需要大家知道一个知识点,不管是java或c++里面的构造函数,还是python里面的初始化函数,题目移动是创建对象时候才会调用(这个是考点)。