面向对象:
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