python第八话之类定义、属性和继承

类定义、属性和继承

面向对象是一种编程思想,所以这一章内容会比较抽象,大家可以先学会怎么去写,后面用的多了写的多了自然就理解了。在第一章中大概阐述了python中的类与类型,前面学过的基本数据类型就是类,这里就来自定义类。

类定义

之前我们在数据类型里面学习到了列表的方法,那是怎么做的可以让列表里面放下这么多方法呢?

1
2
3
4
5
6
7
8
9
10
11
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())

输出

1
2
3
4
5
<__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,代表实例本身。

举个栗子

1
2
3
4
5
6
7
8
9
class Animal:
eye = 2 # 类属性

def __init__(self, name, food):
self.name = name # 实例属性
self.food = food

def play(self):
print('hahaha')

实例化

1
2
cat = Animal('cat','fish') #先不传值
cat.play()

输出

1
hahaha

类的实例化,实例化后会自动执行init这个初始化函数。

实例属性访问

1
2
print(cat.name)
print(cat.food)

输出

1
2
3
hahaha
cat
fish

实例的属性,实例自己可以访问,定义时有加self,不可以 ClassName. attribute(类名.属性)

类属性

1
2
print(Animal.eye)
print(cat.eye)

输出

1
2
2
2

直接定义在类中,类和实例都可以访问,没有加self

​ 可以 ClassName. attribute(类名.属性)

扩展

1
print(Animal.name)

输出

1
AttributeError: type object 'Animal' has no attribute 'name'

类只能访问类属性,不能访问实例属性。

总结

类属性:类的属性,类名和实例都可以调用,相当于类和实例公用的变量

实例属性:实例自己的属性,类不能访问,其他的实例也不能访问

属性调用: 通过属性调用可以直接得到属性的属性值

方法

类中的方法,就是函数,但是被称之为方法,在类中的方法,在被实例调用的时候会自动传入实例本身,因此,在一般情况下,需要在参数中加入self。

1
2
3
4
5
6
7
8
9
class Animal:
eye = 2 # 类属性

def __init__(self, name, food):
self.name = name # 实例属性
self.food = food

def play(self):
print('hahaha')

方法调用

1
2
cat = Animal('cat','fish') 
cat.play()

输出

1
hahaha

类中的self指代的就是实例本身

扩展

1
2
cat = Animal('cat','fish') 
Animal.play(cat)

输出

1
hahaha

继承

如果在B类中定义一个方法,但是这个方法已经在A类中被定义过了,那怎样在B类中使用A类中的方法呢?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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())

输出

1
2
3
旺财
骨头
汪汪汪!!旺财

语法规则

class A:

def play(slef):

print(‘hahaha ‘)

class B(A):

pass

总结

​ 类的继承可以让子类将父类的全部方法和属性继承过来.

​ 在python3中,默认继承object类

转载请注明:Seven的博客

本文标题:python第八话之类定义、属性和继承

文章作者:Seven

发布时间:2018年12月14日 - 00:00:00

最后更新:2018年12月19日 - 22:27:37

原始链接:http://yoursite.com/2018/12/14/2018-12-15-python-class/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

------ 本文结束------
坚持原创技术分享,您的支持将鼓励我继续创作!
0%