面向对象笔记

个人整理

面向对象:
1、定义:一种认识世界、分析世界的方法论。将万事万物抽象为类。
2、类class:类是抽象的概念,是一类事物的共同特征的集合。计算机语言指的就是属性和方法。
3、对象instance、object:对象是类的具象,是一个实体

python中,一个对象的特征也称为属性,它所具有的行为叫方法。
具有相同属性和方法的对象归为一个类。
类是对象的抽象化,对象是类的实例化,对象表示具体事物。

 

面向对象:对函数进行分类和封装。
面向过程:根据业务逻辑从上到下写垒代码
函数式:将某功能的代码封装到函数中,以后使用调用函数

类可以理解为一个模板,里面可以包含多个函数,函数里实现一些功能
对象是根据模板创建的实例,通过实例对象可以执行类中的函数。

class MyClass:
x = 123
class:关键字,表示要创建类
MyClass:类名称

def foo(self): self:特殊参数,必填
return ‘My Class’
print(MyClass.x)
print(MyClass.foo)
print(MyClass.__doc__)

对象是数据和操作的封装。

封装:
组装:将数据和操作组装到一起。
隐藏数据:对外暴露接口,通过接口访问对象。

继承:
多复用
多继承少修改

多态

类对象,类的定义会产生一个类对象
类属性:定义中的变量和定义的方法都是类的属性,也叫方法
类变量:x是类定义的一个变量

MyClass中,x、foo都是类的属性,__doc__也是类的属性
foo方法是类的属性

foo是method方法对象,不是普通的函数对象function了,它必须至少有一个参数,且第一个必须是self
self指代当前实例本身。

 

实例化
a = MyClass() #实例化,在类对象名称后面加上一个括号,即是调用类的实例化方法,完成实例化。
实例化就是真正创建一个该类的对象(实例)

实例化后获得的实例,是不同的实例,即使使用相同的参数实例化,也得到不一样的参数。
python类实例化后,会自动调用__init__方法,这个方法第一个参数必须留给self,其它随意。

 

MyClass()实际上调用的是__init__(self)方法,可以不定义,如果没有定义会在实例化后隐式调用

class MyClass:
def __init__(self):
print(‘init’)

a = MyClass() #会调用__init__

 

类属性:类对象所拥有的属性,它被所有类对象的实例对象所共有,在内存中只存一个副本
# 类属性
class people:
name=”Tom” #公有的类属性
__age=18 #私有的类属性

p=people() #实例化
print(p.name) #实例对象
print(people.name) #类对象

# print(p.__age) #错误 不能在类外通过实例对象访问私有的类属性
print(people.__age) #错误 不能在类外同过类对象访问私有的类属性

 

实例属性:
class people:
name=”tom”

p=people()
p.age=18

print(p.name)
print(p.age) #实例属性是实例对象特有的,类对象不能拥有

print(people.name)
#print(people.age) #错误:实例属性,不能通过类对象调用

也可以将实例属性放在构造方法中

class people:
name=”tom”
def __init__(self,age):
self.age=age

p=people(18)

print(p.name)
print(p.age) #实例属性是实例对象特有的,类对象不能拥有

print(people.name)
# print(people.age) #错误:实例属性,不能通过类对象调用

 

如果在类外修改类属性,必须通过类对象去引用然后进行修改。如果通过实例对象去引用,
# 会产生一个同名的实例属性,这种方式修改的是实例属性,不会影响到类属性,并且如果通过
# 实例对象引用该名称的属性,实例属性会强制屏蔽掉类属性,即引用的是实例属性,除非删除了该实例属性

class Animal:
name=”Panda”

print(Animal.name) #类对象引用类属性
p=Animal()
print(p.name) #实例对象引用类属性时,会产生一个同名的实例属性
p.name=”dog” #修改的只是实例属性的,不会影响到类属性
print(p.name) #dog
print(Animal.name) #panda

# 删除实例属性
del p.name
print(p.name)

 

class Test:

num=100 #类属性
def __init__(self):
self.age=18 #实例属性

test1=Test()
test2=Test()
# test1.age=19
# test2.age=20
print(test1.num) #100
test1.num=200 #如果通过对象去修改类属性,那么Python会自动给这个对象和这个类属性相同名字的实例属性
print(test1.num) #200,只是修改了副本
print(Test.num) #100

del test1.num #删除之后,仍能打印
print(test1.num)

 

3、类方法

是类对象所拥有的方法,需要用修饰器@classmethod来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数(当然可以用其他名称的变量作为其第一个参数,但是大部分人都习惯以’cls’作为第一个参数的名字,就最好用’cls’了),能够通过实例对象和类对象去访问。

class people:
country=”china”

@classmethod
def getCountry(cls):
return cls.country

p=people()
print(p.getCountry()) #实例对象调用类方法
print(people.getCountry()) #类对象调用类方法

 

类方法还有一个用途就是可以对类属性进行修改:
class people:
country=”china”

@classmethod
def getCountry(cls):
return cls.country
@classmethod
def setCountry(cls,country):
cls.country=country

p=people()
print(p.getCountry()) #实例对象调用类方法
print(people.getCountry()) #类对象调用类方法

p.setCountry(“Japan”)

print(p.getCountry())
print(people.getCountry())

 

 

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/88328

(0)
泰谷子泰谷子
上一篇 2017-11-12
下一篇 2017-11-12

相关推荐

  • 函数的一些简单笔记

    函数 数学定义:y=f(x),y是x的函数,x是自变量 Python函数: 1、有若干个语句组成的语句块、函数名称、参数列表构成,它是组织代码的最小单元 2、完成一定的功能 函数的作用: 1、结构化编程对代码的基本的封装,一般按照功能组织一段代码 2、封装的目的为了复用,减少冗余代码 3、代码更加简洁美观、可读易懂 函数的分类: 1、内建函数,如max()、…

    2017-10-15
  • Python高阶函数及装饰器

    First Class Object 函数在Python中是一等公民 函数也是对象,可调用的对象 函数可作为普通变量、参数、返回值等 高阶函数 数学定义:y=g(f(x)) 高阶函数需满足的条件,至少其一 接受一个或多个函数作为参数 输出一个函数 内建函数的高阶函数 排序:sorted(iterable[,key][,reverse]) 返回一个新列表,对一…

    2018-04-22
  • mysql慢查询日志进行按库切割重写文件然后分析

    需求: 把每天的慢查询日志进行按库切割 对每个库的慢查询日志进行分析 思路: 工具/功能 一般统计信息 高级统计信息 脚本 优势 mysqldumpslow 支持 不支持 perl mysql官方自带 mysqlsla 支持 支持 perl 功能强大,数据报表齐全,定制化能力强. mysql-explain-slow-log 支持 不支持 perl 无 my…

    Linux干货 2015-04-03
  • python快速入门之数据类型

        Python 是 90 年代初由 Guido Van Rossum 为了打发圣诞节而创建的语言。如今它已是当前最流行的程序语言之一.     Python的关键要素有以下几点:1.基本数据类型;2.对象引用;3.组合数据类型;4.逻辑操作符;5.控制流语句;6.算数操作符…

    Python干货 2015-12-10
  • Python 部分知识点总结(八)

    此篇博客只是记录第十周未掌握或不熟悉的知识点,用来加深印象。

    Python笔记 2018-05-13
  • Python函数式编程指南(四):生成器

    生成器是迭代器,同时也并不仅仅是迭代器,不过迭代器之外的用途实在是不多,所以我们可以大声地说:生成器提供了非常方便的自定义迭代器的途径。 这是函数式编程指南的最后一篇,似乎拖了一个星期才写好,嗯…… 转载请注明原作者和原文地址:) 4. 生成器(generator) 4.1. 生成器简介 首先请确信,生成器就是一种迭代器。生成器拥有next方法并且行为与迭代…

    Linux干货 2015-03-11