欢迎光临
我们一直在努力

面向对象学习

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

赞(0) 打赏
未经允许不得转载:运维那些事 » 面向对象学习

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏