面向对象三

类的对象
class Student:
    def __init__(self, name):
        self.name = name


a = Student('a')
b = Student('b')
c = Student('c')
d = Student('d')


实例属性:
对象.属性 = xxxx
只能用对象调用,不能用类调用

类对象
类可以实例化对象,但是类本身也是对象,在类定义的时候被创建出来并且只能有一个类属性和实例方法
定义在类里面, 方法的外面 ,最好用类调用 对象调用只能获取不能修改

class Student:
    num = 0

    def __init__(self, name):
        self.name = name
        Student.num += 1
        # self.num 先去对象里找有没有 如果没有去类里找
        self.num += 1


a = Student('a')
b = Student('b')
c = Student('c')
d = Student('d')
# 调用类属性
print(Student.num)
#                类       实例
print(a.num)  # 1         2
print(b.num)  # 2         3
print(c.num)  # 3         4
print(d.num)  # 4         5
# 实例属性用对象调用
# 类属性用类调用

实例方法
类里面定义的方法 参1是self可以用对象调用

类方法
@classmethod 参1是cls 用类调用 也可以用对象调用

静态方法
@staticmethod 用类调用 也可以用方法调用

总结:
从类方法和实例方法以及静态方法的定义形式就可以看出来,类方法的第一个参数是类对象cls, 那么通过cls引用的必定是类对象的属性和方法;
实例方法的第一个参数是实例对象self,那么通过self引用的可能是类属性、也有可能是实例属性(这个需要具体分析),不过在存在相同名称的类属性和实例属性的情况下,实例属性优先级更高。
静态方法中不需要额外定义参数,因此在静态方法中引用类属性的话,必须通过类实例对象来引用

new 魔法方法:

class A(object):
    def __init__(self, name):
        self.name = name
        print('时秒')
        print(self.name)

    # new方法 在创建对象的时候 会被自动调用 作用是创建一个对象 并且返回 这个方法调用在init之前
    def __new__(cls, *args, **kwargs):
        # 必须返回一个正确的对象
        return object.__new__(cls)


a = A('孙千')

单例:
是一种设计模式 使用单例类来创建实例对象,只有一个实例,这种设计模式叫做单例模式

# 单例 模式
class A(object):
    # 类属性
    __instance = None

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

    def __new__(cls, *args, **kwargs):
        # 判断如果instance是空的就去创建对象
        if not cls.__instance:
            cls.__instance = object.__new__(cls)
        return cls.__instance


a = A('时秒')
b = A('时秒')
A.instance = None
c = A('时秒')
print(id(a))
print(id(b))
print(id(c))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值