class Person(object):
count = 0
def __new__(cls, *args, **kwargs):
cls.count += 1
x = object.__new__(cls)
return x
def __init__(self,name,age):
self.name = name
self.age = age
"""
每次创建对象都会调用 __new__ 和 __init__ 方法
调用 __new__ 方法,用来申请内存
如果不重写 __new__ 方法,它会自动找 object 的 __new__
object 的 __new__ 方法,默认实现是申请了一段内存,创建了一个对象
"""
p1 = Person('张三',18)
p2 = Person('李思思',28)
p3 = Person('Curry',20)
print(p1,p2,p3)
print(Person.count)
"""
申请了内存,创建了对象,被设置它的类型是Person
p4 = object.__new__(Person)
p4.__init__('tony,23)
print(p4)
"""
"""
面向对象3大特性:封装,继承,多态
封装:函数是对1语句块的封装,类是对函数和变量的封装
继承:类和类之间可以认为手动的建立父子关系,父类的属性和方法,子类可以使用
多态:是一种技巧,提高代码的灵活度
"""