python面向对象——语法进阶

目录

1、类方法和静态方法

1.1 类方法

1.2 静态方法

2、单例模式

3、property属性

3.1 什么是property属性

4、property类属性


1、类方法和静态方法

1.1 类方法

1.1.1 类方法的特点

需要使用装饰器@classmethod 来标识其为类方法,对于类方法而言,第一个参数必须是类的对象,一般以cls作为第一个参数。

1.1.2 类方法的使用场景

  • 当方法中需要使用到类对象的时候(比如说修改私有类属性),定义类方法。

  • 类方法一般配合类来使用

示例:

# 定义私有类属性,通过类方法获取这个私有类属性
class Dog(object):
    __age = 3

    @classmethod
    def get_age(cls):  # cls指的就是我们的类对象,   此时  cls == Dog  # 类方法
        return cls.__age


wangcai = Dog()
print(wangcai.get_age())
1.2 静态方法

1.2.1 静态方法的特点

  • 需要使用装饰器@staticmethod来进行装饰,静态方法即不需要传递类对象,也不需要传递实例对象,没有self/cls

  • 静态方法是可以通过实例对象和类对象去进行访问的。

1.2.2 静态方法的使用场景

  • 当方法中即不需要使用实例对象,也不需要使用类对象的时候,就定义静态方法

  • 取消不必要的参数传递,有利于减少不必要的内存占用和性能消耗

示例:

class Dog(object):
    def info(self):
        print('这是info方法')

    @staticmethod
    def print_info(self):
        print('这是一个静态方法')
        print(self)


d = Dog()
d.info()
d.print_info(6)

2、单例模式

在某个系统中里面的类对象只有一个 new 是在对象实例化之前被调用的方法。它的主要目的是创建一个新的实例,并返回这个实例。

示例:

class Sun(object):
    """
    思路:创建类的时刻只有一次
    如果是第一次创建,直接开辟空间直接创建
    如果是第二次创建,只需要返回上一次创建的那个对象
    """
    __instance = None

    def __new__(cls, *args, **kwargs):
        print('这是new魔法方法')
        if cls.__instance is None:
            cls.__instance = object.__new__(cls)
            return cls.__instance
        else:
            return cls.__instance

    def __init__(self):
        print('这是初始化魔法方法')
        self.age = 18


s1 = Sun()
s2 = Sun()
print(id(s1))
print(id(s2))

3、property属性

3.1 什么是property属性

property属性就是负责把类中一个方法当做一个属性去使用,这样做可以简化代码的使用,增强可读性。

装饰器的方式

示例:

class Person(object):
    def __init__(self):
        self.__age = 1

    @property
    def age(self):
        self.__age += 2
        return self.__age

    @age.setter
    def age(self, new_age):  # new_age用来接收外部给p.age复制的参数
        if 0 < new_age < 200:
            self.__age = new_age
        else:
            print('年龄设置有误!')


p = Person()
print(p.age)
p.age = 10
print(p.age)

4、property类属性

格式:

  • property(参数1,参数2)

第一个参数表示的是获取属性时会执行的方法名

第二个参数表示的是设置属性时会执行的方法名

示例:

class Person(object):
    def __init__(self):
        self.__age = 1

    def get_age(self):
        return self.__age

    def set_age(self, new_age):
        if 0 < new_age < 200:
            self.__age = new_age
        else:
            print('年龄设置错误,回去改改')

    age = property(get_age, set_age)


p = Person()
print(p.age)
p.age = 10
print(p.age)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值