程序员文章、书籍推荐和程序员创业信息与资源分享平台

网站首页 > 技术文章 正文

python之面向对象

hfteth 2025-05-23 17:19:42 技术文章 20 ℃

类的定义

Bash
class Name(object):
	attr    //成员
  
  def func(self):  //函数,第一个入参self必传
  	do

注:

  • self是函数中的必传参数,且必须放在第一个参数的位置
  • self是一个对象,它代表实例化的变量自身
  • self可以直接通过点来定义一个类变量。self.name = 't'
  • self中的变量与含有self参数的函数可以在类中的任何一个函数内随意调用
  • 非函数中定义的变量在定义时不用self

使用示例

Bash
class Person(object):
	name = None
	def say(self):
  	print(f'{self.name} is saying')

per = Person()  //类的实例化
print(per.name) // 通过实例化进行属性的调用
per.func(). // 通过实例化进行函数的调用

类的构造函数

构造函数:类中的一种默认函数,用来将类实例化的同时,将参数传入类中

def __init__(self,name):
	self.name = name

类的私有属性(函数+变量)

  • 无法被实例化后的对象调用类中的函数与变量
  • 类内部可以调用私有函数与变量
  • 只希望类内部业务调用使用,不希望被使用者调用
  • 在变量或函数前添加__(2个下划线),变量或函数名后边无需添加

装饰器

  • 是一种函数,可以接受函数入参,可以返回函数
  • 接收一个函数,内部对其处理,然后返回一个新的函数,动态的增强函数功能
  • 将b函数在a函数中执行,在a函数中可以选择执行或不执行b函数,也可以对b函数进行加强处理
def out(func_args):
	def inter(*args,**kwargs):
  	return func_args(*args,**kwargs)
return inter

//用法一
def c(name):
	print(name)

out(c)('tom')  //装饰器的用法

//用法二  @符号+装饰器函数放在被调用函数的上一行,
//被调用函数正常定义,调用时只需直接调用执行函数即可
@out   
def c(name):
	print(name)

c('tom')

常用装饰器

装饰器

功能

说明

classmethod

将类函数可以不经过实例化而直接调用

用法:

class Test(object):

@classmethod

def func(cls,...)

do

Test.func(...)

参数cls替代self,代表当前操作的是类

staticmethod

将类函数可以不经过实例化而直接被调用,被修饰的调用函数不许传递cls或self参数,且无法在该函数内调用其他类函数或类变量

用法:

class Test(object):

@staticmethod

def add(a,b):

return a+b


Test.add(1,2)


property

把类函数执行的时候去掉括号,就跟调用属性差不多

class Test(object):

@property

def add():

print('add')


test = Test()

test.add

类的继承

  • 子类拥有父类的所有属性和方法
  • 父类不具备子类自有的属性和方法
  • 定义子类时,将父类传入子类参数内
  • 子类实例化可以调用本身与父类函数与变量,父类无法调用子类的函数和方法
  • 多态:子类中重写父类方法
  • 多重继承:将被继承的类依次放入子类参数位中,用逗号隔开。如:class Child(P1,P2,..)
  • super函数:调用父类的方法
class Parent(object):
	def think(self)
		print('think')

class Child(Parent):
	def run():
  	print('run')

//super用法
class p(object):
	def __init__(self):
  	print('parent')
class c(p):
	def __init__(self):
  	print('child')
		super(Child,self).__init__()

类的内置函数

函数名

功能

说明

__str__

在print当前实例化对象时,返回该函数的返回值

用法:def __str__(self):

return str_type

示例:

class Test(object):

def __str__(self):

return 'test'


test = Test()

print(test)


__getattr__

当调用属性或方法不存在时,会返回该方法定义的信息

用法:

def __getattr__(self,key):

print('getattr')

示例:

class Test(object):

def __getattr__(self,key):

print('{} not exist'.format(key))


test = Test()

t.name

__setattr__

拦截当前类中不存在的属性和值

用法:

def __setattr__(self,key,value):

print('setattr')

示例:

class Test(object):

def __setattr__(self,key,value):

if key not in self.__dict__:

self.__dict__[key] = value


test = Test()

t.name='test'

__call__

本质是将一个类变成一个函数

用法:

def __call__(self,*args,**kwargs):

print('call')

示例:

class Test(object):

def __call__(self,**kwargs):

print(**kwargs)


test = Test()

t(name='test')

最近发表
标签列表