Python中类
2020-12-13 03:34
标签:sel 开头 变量 python解释器 ati 实例化 参数 子类 占用 1.类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self,self代表类的实例,而非类。 self 不是 python 关键字,我们把他换成 runoob 也是可以正常执行的: 2. Python 使用了引用计数这一简单技术来跟踪和回收垃圾。 在 Python 内部记录着所有使用中的对象各有多少引用。 一个内部跟踪变量,称为一个引用计数器。 当对象被创建时, 就创建了一个引用计数, 当这个对象不再需要时, 也就是说, 这个对象的引用计数变为0 时, 它被垃圾回收。但是回收不是"立即"的, 由解释器在适当的时机,将垃圾对象占用的内存空间回收。Python 的垃圾收集器实际上是一个引用计数器和一个循环垃圾收集器 3. __foo__: 定义的是特殊方法,一般是系统定义名字 ,类似 __init__() 之类的。 _foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import * __foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。 4. new 和 init 在创建对象的时候,init方法不是最早被调用的。而是new方法 __new__方法接受的参数虽然也是和__init__一样,但__init__是在类实例创建之后调用,而 __new__方法正是创建这个类实例的方法,并且返回实例对象给init。 p = Person(name, age)首先执行使用name和age参数来执行Person类的__new__方法,这个__new__方法会 返回Person类的一个实例(通常情况下是使用 super(Persion, cls).__new__(cls, ... ...) 这样的方式), 当我们理解了__new__方法后,我们还可以利用它来做一些其他有趣的事情,比如实现 设计模式中的 单例模式(singleton) 。 因为类每一次实例化后产生的过程都是通过__new__来控制的,所以通过重载__new__方法,我们 可以很简单的实现单例模式。
5. ※ __new__和__init__的区别,说法正确的是? (ABCD) Python中类 标签:sel 开头 变量 python解释器 ati 实例化 参数 子类 占用 原文地址:https://www.cnblogs.com/tarzen213/p/11079853.htmlpython对象销毁(垃圾回收)
单下划线、双下划线、头尾双下划线说明:
A. __new__是一个静态方法,而__init__是一个实例方法
B. __new__方法会返回一个创建的实例,而__init__什么都不返回
C. 只有在__new__返回一个cls的实例时,后面的__init__才能被调用
D. 当创建一个新实例时调用__new__,初始化一个实例时用__init__
import time
class Test():
‘‘‘静态方法和类方法
构造函数和析构函数‘‘‘
print(‘第一个被打印‘)
count = 0 #类属性:类和对象都可以调用 但是对象无法修改类属性
def __new__(cls, name, age): #new方法是类方法,
print(‘__new__才是对象创建的时候调用的返回一个对象给init,中的self。而init是在创建完之后调用的‘)
return super(Test,cls).__new__(cls)
def __init__(self,name,age): #self是当前类的对象本身,python解释器会自动把对象传入。代表类的实例,而非类
print(‘“__init__”这个构造函数,具有初始化的作用,也就是当该类被实例化的时候就会执行该函数‘)
self.name = name
self.age = age
Test.count += 1
@classmethod #类方法:类和对象都可以调用 。只能访问类属性
def class_fun(cls):
print(‘class fun%s‘%(Test.count))
def eat(self):
print(‘这是实例方法‘)
#静态方法,只是名义上归类管理,实际上在静态方法里访问不了类或实例中的任何属性。但是可以被对象和类调用
‘‘‘静态方法和普通的方法就是作用域不一样,只能被当前对象和类调用,其他都一样‘‘‘
@staticmethod
def static_fun():
print(‘静态方法‘)
def __del__(self):
print(‘当使用del 删除对象时,会调用他本身的析构函数,另外当对象在某个作用域中调用完毕,在跳出其作用域的同时析构函数也会被调用一次,这样可以用来释放内存空间。‘)
oo = Test(‘fan‘,19)
ff = Test(‘zz‘,20) #创建了两个对象,那么count会增加到2
ff.count = 4
print(Test.count)
ff.static_fun()
Test.static_fun()
oo.class_fun()
print(oo.name)
Test.class_fun()
time.sleep(5) #五秒之后调用del来释放空间
class Test1():
print(‘test1‘)
@property #把方法变成属性一样调用
def get_name(self): #这个必须要返回一个数据。
return self.name
@get_name.setter
def get_name(self,name):
self.name = name
t1 = Test1()
t1.get_name = ‘fa‘
print(t1.get_name)
上一篇:命令行启动python的IDLE
下一篇:Spring-1-IOC