本文最后更新于:14 天前
类定义、属性和继承
面向对象是一种编程思想,所以这一章内容会比较抽象,大家可以先学会怎么去写,后面用的多了写的多了自然就理解了。在第一章中大概阐述了python中的类与类型,前面学过的基本数据类型就是类,这里就来自定义类。
类定义
之前我们在数据类型里面学习到了列表的方法,那是怎么做的可以让列表里面放下这么多方法呢?
class Abc:
def fun1(self):
print('this is fun1')
def fun2(self):
print('this is fun2')
a=Abc()
print(a)
print(a.fun1())
print(a.fun2())
输出
<__main__.Abc object at 0x0000024ED872A908>
this is fun1
None
this is fun2
None
cla = ClassName()
cla.fun1()
cla.fun2()
实例化之后,可以实现类似于列表中方法的定义形式
总结
定义:累得定义使用关键字 class
封装:类可以把各种对象组织在一起,通过.(点)运算符来调用类中封装好的对象。
概念:类就像是我们平时说的名词,一个称呼,但是却不是一个具体的实例,比如说:我们都是人,但是人这个名词,不能具体指代你我,我们会用一个人的名字去指代一个具体的人,这个过程就类似于实例化。
属性
1.类数据属性。类属性是可以直接通过“类名.属性名”来访问和修改。类属性是这个类的所有实例对象所共有的属性,任意一个实例对象都可以访问并修改这个属性(私有隐藏除外)。
2.实例数据属性。在属性前面加了self标识的属性为实例的属性,在定义的时候用的self加属性名字的形式,在查看实例的属性时就是通过实例的名称+‘.’+属性名来访问实例属性。
3.方法属性。定义属性方法的内容是函数,函数的第一个参数是self,代表实例本身。
举个栗子
class Animal:
eye = 2 # 类属性
def __init__(self, name, food):
self.name = name # 实例属性
self.food = food
def play(self):
print('hahaha')
实例化
cat = Animal('cat','fish') #先不传值
cat.play()
输出
hahaha
类的实例化,实例化后会自动执行init这个初始化函数。
实例属性访问
print(cat.name)
print(cat.food)
输出
hahaha
cat
fish
实例的属性,实例自己可以访问,定义时有加self,不可以 ClassName. attribute(类名.属性)
类属性
print(Animal.eye)
print(cat.eye)
输出
2
2
直接定义在类中,类和实例都可以访问,没有加self
可以 ClassName. attribute(类名.属性)
扩展
print(Animal.name)
输出
AttributeError: type object 'Animal' has no attribute 'name'
类只能访问类属性,不能访问实例属性。
总结
类属性:类的属性,类名和实例都可以调用,相当于类和实例公用的变量
实例属性:实例自己的属性,类不能访问,其他的实例也不能访问
属性调用: 通过属性调用可以直接得到属性的属性值
方法
类中的方法,就是函数,但是被称之为方法,在类中的方法,在被实例调用的时候会自动传入实例本身,因此,在一般情况下,需要在参数中加入self。
class Animal:
eye = 2 # 类属性
def __init__(self, name, food):
self.name = name # 实例属性
self.food = food
def play(self):
print('hahaha')
方法调用
cat = Animal('cat','fish')
cat.play()
输出
hahaha
类中的self指代的就是实例本身
扩展
cat = Animal('cat','fish')
Animal.play(cat)
输出
hahaha
继承
如果在B类中定义一个方法,但是这个方法已经在A类中被定义过了,那怎样在B类中使用A类中的方法呢?
class Animal:
eye = 2
def __init__(self, name, food):
self.name = name
self.food = food
def play(self):
print('hahaha')
class Dog(Animal):
def wangwang(self):
print('汪汪汪!!%s' %self.name)
demo = Dog('旺财', '骨头')
print(demo.name)
print(demo.food)
print(demo.wangwang())
输出
旺财
骨头
汪汪汪!!旺财
语法规则
class A:
def play(slef):
print(‘hahaha ‘)
class B(A):
pass
总结
类的继承可以让子类将父类的全部方法和属性继承过来.
在python3中,默认继承object类
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!