python内置方法和绑定方法

内置方法、绑定方法

一、绑定与非绑定

1、类方法

类方法,通过装饰器@classmethod 进行修饰 , 类方法可以让类在多次实例化中有一个记忆的功能。

类方法操作的一定是类属性 , 因为类方法无法通过self去查找对象绑定的实例属性。

class Student:
    # 类属性
    id = 0

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

    @classmethod
    def count(cls):
        # 这个是类方法
        cls.id += 1
        return cls.id

cx = Student('cx')
# 类方法可以由类进行调用也可以由对象进行调用
# Student.count()
# cx.count()
print(cx.id)
hzx = Student('hzx')
print(hzx.id)
ll = Student('卢本伟')
ls = Student('吴彦祖')
print(Student.id)

2、静态方法(非绑定)

静态方法,通过装饰器@staticmethod进行装饰;没有cls和self参数限制的方法也就是没有被绑定的方法称之为静态方法。

静态方法就相当于定义在类外面的函数,只是为了方便管理把常用的方法(函数)放在类中统一管理

import time
class Student:
    # 类属性
    id = 0

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

    @staticmethod
    def str_time():
        return f'{time.strftime("%Y/%m/%d")}'


xc = Student('xc')

# 静态方法可以由类进行调用也可以由对象进行调用
print(xc.str_time())
print(Student.str_time())

二、检查类型

type()	# 检查单个的数据类型
issubclass(cls , class_tuple)	# 检查是否被继承
isinstance(obj , cls)	# 对象是否由类实例化的
class Father:
    pass


class Son(Father):
    pass

# 检查是否有继承关系(前者是否有继承后者)
print(issubclass(Father, Son))
print(issubclass(Father, object))
print(issubclass(Son , Father))

cx = Father()
# 对象是否由类实例化的
print(isinstance(cx, Father))
print(isinstance(cx, Son))

三、内置方法(了解)

1、信息格式化方法

__str__该方法用户可以直接通过打印对象名来获取该对象的自定义描述,而不是对应的内存地址。

__repr__该方法时返回该对象的自定义描述,是在交互模式中进行使用

>>> class A:
	def __init__(self , name , age):
		self.name = name
		self.age = age
	def __repr__(self):
		return f'我叫{self.name},今年{self.age}岁 ,我是最帅气的'

	
>>> xy = A('帅气的溪岳' , 20)
>>> xy
我叫帅气的溪岳,今年20岁 ,我是最帅气的
>>> ll = A('わかだ' , 21)
>>> ll
我叫わかだ,今年21岁 ,我是最帅气的
>>> mr = A('墨尔本阴',18)
>>> mr
我叫墨尔本阴,今年18岁 ,我是最帅气的
>>> xt = A('勇士刑天' , 23)
>>> xt
我叫勇士刑天,今年23岁 ,我是最帅气的



class A:

    def __init__(self , name , age):
        self.name = name
        self.age = age
    # 如果只改写了repr的方法 , 那么str也会对其进行指向输出
    
    # def __str__(self):
    #     return f'我叫{self.name},今年{self.age}岁'
    # 该方法要在交互模式中
    def __repr__(self):
        return f'我叫{self.name},今年{self.age}岁 ,我是最帅气的'

ac = A('帅气的初雪' , 24)
gx = A('帅气的陈冠希' , 18)
print(cx)
print(gx)

2、析构方法

__del__当检测到对象没有被继续引用时 ,就会自动的将对象所占用的内存空间进行清除

class A:

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

    def __del__(self):
        print(f'{self.name}被析构删除')


cx = A('帅气的初雪' , 24)
xx = cx
print(cx)
del cx
print('='*10)

# gx = A('帅气的陈冠希' , 18)
# # print(ac.name)
# print(gx)

__new__时内置的静态类方法 , 主要是给实例对象分配内存空间

python解释器在得到这个方法返回的实例对象引用之后 , 将这个引用作为第一个参数传递给__init__中使用

如果没有返回的化 , python解释器就获取不到这个对象引用 。new必须要有返回值

class B:

    def __new__(cls, *args, **kwargs):
        print('给对象分配内存空间')
        # 给实例对象分配内存空间
        instance = super().__new__(cls)
        # 返回已经分配好内存空间的对象引用
        return  instance


    def __init__(self):
        print('实例对象属性')

x = B()
print(x)
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力学习的小初雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值