首页 > 其他分享 >day25 continued

day25 continued

时间:2023-12-26 20:33:21浏览次数:26  
标签:__ name day25 self init new continued age

类与对象复习:

类的派生:在自己的init里面加入父类的init
class Parent():
def __init__(self,name):
self.name = name
class Son(Parent):
def __init__(self,age,name):
super().__init__(name)
self.age = age

son1=Son(18,'yyy')
print(son1.__dict__)


打印结果:
{'name': 'yyy', 'age': 18}

类的组合:类对象可以作为引用值、参数、返回值、容器的元素

类的封装:在需要封装的属性或者方法前面加__,类内部可以访问,类外部不行

类与对象的绑定方法与非绑定方法:
没有被任何装饰器装饰的就是对象的绑定方法,约定俗成的第一个参数为self(实例化对象),自动传参;类也能调用对象的绑定方法,但是self需要传参
被@classmethod装饰器装饰的就是类的绑定方法,约定俗成的第一个参数是cls(类本身),自动传参;对象也能调用类的绑定方法,但cls还是类本身
被@staticmethod装饰器装饰的就是非绑定的方法,就是一个普通的函数。

 

isinstance与issubclass:
class Parent():
def __init__(self,name):
self.name = name
class Son(Parent):
def __init__(self,age,name):
super().__init__(name)
self.age = age

son1=Son(18,'yyy')

print(isinstance(son1,Parent))#会检测父类
print(issubclass(Son,Parent))

打印结果:
True
True

 

 

反射:
hasattr
getattr
setattr
delattr

 

__call__的触发条件:对象加括号
class Foo():
def __init__(self,name):
self.name = name
def __call__(self, *args, **kwargs):
print("__call__被触发啦")

Foo('yjl')()

打印结果:
__call__被触发啦


__new__(cls):

只要是面向对象的编程语言,类的实例化一定包含两个步骤:
(1)在内存中创建对象,即开辟一块内存空间来存放类的实例化对象(Instance);
(2)初始化对象,即给实例的属性赋予初始值。

构造方法包括创建对象和初始化对象,在python当中,分为两步执行:先执行__new__方法,然后执行__init__方法;
__new__是在实例创建之前被调用的,它的任务是创建实例然后返回该实例
__init__是当实例对象创建完成后被调用的,然后设置对象属性的一些初始值。

__new__在__init__之前被调用,__new__的返回值(obj)将传递给__init__方法的第一个参数(self),然后__init__给这个实例设置一些参数,__init__不需要返回值


如果__new__方法返回None,则__init__方法不会被执行,所以__new__必须要有返回值。除此以外,创建obj时只能调用父类中的__new__方法(如object),而不能调用毫无关系的类的__new__方法。


__new__至少要有一个参数cls,代表要实例化的类,此参数在实例化时由Python解释器自动提供,也可手动添加

 

我们可以将类比画画,__new__方法提供一张白纸,__init__方法在纸上画画,但归根到底是同一张纸

 

class Foo():
def __new__(Foo, age,name):
obj=super().__new__(Foo)
print('obj 的id:',id(obj))
print(obj.__dict__)
return obj
def __init__(self,age,name):
print(self.__dict__)
self.age=age
self.name=name
print(self.__dict__)
print('self的id:',id(self))

f1=Foo(100,'yyy')
print('f1 的id:',id(f1))
print(f1.__dict__)

打印结果:
obj 的id: 2867407950352
{}
{}
{'age': 100, 'name': 'yyy'}
self的id: 2867407950352
f1 的id: 2867407950352
{'age': 100, 'name': 'yyy'}

 

 


元类:
元类是来造类的 type是Python中内建元类
1. 道 即是 type
2. 一 即是 metaclass(元类,或者叫类生成器)
3. 二 即是 class(类,或者叫实例生成器)
4. 三 即是 instance(实例)
5. 万物 即是 实例的各种属性与方法,我们平常使用python时,调用的就是它们。
元类()→类
元类()()→对象
类的组成:类名/父类们/类体代码名称空间

class Mymeta(type):
def __init__(self, name, bases, dct):#牢牢记住这里的self是Mymeta的实例即,类
#控制类产生
super().__init__(name, bases,dct)

def __call__(self, *args, **kwargs):
obj=super().__new__(self,*args, **kwargs)
self.__init__(obj,*args,**kwargs)


return obj

 

标签:__,name,day25,self,init,new,continued,age
From: https://www.cnblogs.com/yyyjw/p/17929309.html

相关文章

  • day25 面向对象高阶
    复习@classmethod方法类内部使用@classmethod修饰器的方法就是绑定到类的方法→类方法类方法可以直接通过类调用而无需实例化def__init__(self):类的构造函数创建一个实例(对象)时自动调用在py中self和cls只是约定俗成的命名,没有特殊的含义self通常作为对象方......
  • Day25 For循环
    For循环for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构。for循环执行的次数是在执行前就确定的。语法格式如下:for(初始化;布尔表达式;更新(迭代)}{​//代码语句}在idea中直接输入100.for回车即自动填写for(inti=0;i<100;i++){}......
  • noip Template (to be continued)
    \(noip\Templates\)\(Part1\Graph\)ToposortDijkstraSPFAFloydKruskalPrimTarjanLCA\(Graph\)0.链式前向星存图inth[N],e[N],ne[N],idx;//对于每个点k开一个单链表,存储所有可以走到的点。h[k]存储单链表头结点//添加一条边a->bvoidadd(inta,intb)......
  • [代码随想录]Day25-回溯算法part05
    题目:491.递增子序列思路:核心问题——同层去重,这一题不能够重新排序因此不可以用i>index&&nums[i]==nums[i-1]来去重,而是每一层开一个map来判断该数是否出现过代码:var(res[][]intpath[]int)funcfindSubsequences(nums[]int)[][]int{res=make(......
  • Day25(2023.08.09)
    行程8:45    到达上海市信息安全测评认证中心(黄浦区陆家浜路1308号)9:00  Linux核查11:30--13:00   吃饭休息13:00 Linux核查17:00      下班    其中/etc/passwd/etc/hosts.equiv/etc/login.defs/etc......
  • day25
    一、[HDCTF2023]MasterMisc1.首先得到了六个文件,其中查看是第一个和第六个,发现分别含有zip头和尾,猜测要将六个文件合在一起cattopic.zip.001topic.zip.002topic.zip.003toppic.zip.005topic.zip.006>>topic.zip2.得到zip,显示需要密码,直接爆破3.在图片尾接着另外一......
  • vue-day25--自定义指令总结
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><title>自定义指令总结</title><scriptt......
  • vue-day25--自定义指令v-fbind
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><title>自定义指令</title><scripttyp......
  • vue-day25--自定义指令
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><title>自定义指令</title><scripttyp......
  • vue-day25--v-pre指令
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><title>v-pre指令</title><scriptt......