练习|学习笔记

简介: 快速学习练习

开发者学堂课程【Python 入门 2020年版练习4】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/639/detail/10384


练习


内容介绍:

一、通过 init 方法计数 

二、通过 new 方法计数

三、优化 

 

一、通过 init 方法计数

# 定义—个类属性,记录通过这个类创建了多少个对象

Class Person(object):

count = 0 

def  init (self,name,age):

Person.count += 1

self.name = name

self.age = age 

# 每次创建对象,都会调用 new 和 init 方法

p1 = Person(‘张三’,18)

p2 = Person( '李四",19)

p3 = Person( ‘jack’, 20)

print(Persort.count)

创建 p1、p2、p3三个对象,每次创建对象,都会调用 new  init 方法,在 init 下添加 Person.count += 1每次调用时count 都会加一,即可实现计数。 

 

二、通过 new 方法计数

Class Person(object):

count = 0

def  new (cls, *args,**kwargs):

cls.count += 1

x = object. new (cls) # 申请内存,创建一个对象,并设置类型是 Person 类

return x

def _init_(self,name,age) :

# Person .count += 1

self.name = name

self.age = age

# 每次创建对象,都会调用 new  init 方法

# 调用 new 方法,用来申请内存

# 如果不重写 new 方法,它会自动找 object 的 new 

# object 的 new 方法,默认实现是申请了一段内存,创建一个对象 

p1 = Person(‘张三’,18)

p2 = Person(‘李四’,19)

p3 = Person( ‘jack’ , 20)

print(p1,p2,p3)

p4 = object. new (Person)  # 申请了内存,创建了一个对象,被设置它的类型是 Person

p4. init ( ‘tony’ , 23)

print(p4)

每次创建对象都会调用 new  init 方法,调用 new 方法用来申请内存,如果不重写 new 方法,它会自动找 object 的 new  object 的 new 方法,默认实现是申请了一段内存,创建一个对象。如果想要创建一个对象还可以用p4的方法。

 new 方法里加入 cls.count += 1即可实现计数。 

 

三、优化

class Person(object):

count = 0  # 类属性 

def _new_(cls,*args,**kwargs):

cls. count += 1

x = object._new_(cls)  # 申请内存,创建一个对象,并设置类型是 Person类

return x

def  init_(self,name,age):

# Person.count += 1

self.name = name

self.age = age

@classmethod

def get_count(cls):

return cls. count

p1 = Person(‘张三’,18)

p2 = Person(‘李四’,19

p3 = Person( ‘jack’ , 20)

print(p1, p2,p3)

print(Person.get_count())

目前的代码 count 可以被在外部改变,将 count 重命名为 count 变为私有属性。 

外部想访问可以创建一个类方法 def get_count(cls):

相关文章
|
10月前
|
数据采集 前端开发 数据挖掘
利用 html_table 函数轻松获取网页中的表格数据
本文介绍了如何使用 R 语言中的 `html_table` 函数结合代理 IP 技术,轻松提取网页表格数据并规避反爬机制。通过设置代理和请求头,示例代码展示了如何从 58 同城采集租房信息并保存为 CSV 文件。该方法适用于需要频繁采集数据的场景,确保数据采集的高效和稳定性。
366 2
利用 html_table 函数轻松获取网页中的表格数据
|
9月前
|
设计模式 架构师 安全
一文详解架构设计的本质
本文分为三个部分,从思维讲起到系统逆向分析,到后面的正向设计。从“道,理,术”三个角度诠释了系统架构设计的全面知识体系。
|
11月前
|
人工智能 供应链 新能源
推动AI与基础科学融合,第二届世界科学智能大赛圆满收官
推动AI与基础科学融合,第二届世界科学智能大赛圆满收官
278 5
|
JavaScript
vue(3) 出现了不能读的属性定义的报错但可以渲染如何解决
vue(3) 出现了不能读的属性定义的报错但可以渲染如何解决
270 0
|
容器
【qt】如何获取网卡的IP地址?
【qt】如何获取网卡的IP地址?
163 0
|
数据库
代码的应用重构问题之BaseActivity类的主要功能问题如何解决
代码的应用重构问题之BaseActivity类的主要功能问题如何解决
|
域名解析 存储 负载均衡
实现服务器多IP的实现方法
实现服务器多IP的实现方法
529 1
|
分布式计算 Hadoop 大数据
大数据 | Hadoop HA高可用搭建保姆级教程(大二学长的万字笔记)(下)
大数据 | Hadoop HA高可用搭建保姆级教程(大二学长的万字笔记)(下)
372 0
|
程序员 Shell 开发者
Python 为什么抛弃累赘的花括号,使用缩进来划分代码块?
Python 为什么抛弃累赘的花括号,使用缩进来划分代码块?
111 1
|
XML Java Android开发
Java学习—Eclipse/Idea如何设置自动提示
Java学习—Eclipse/Idea如何设置自动提示
184 1