目录
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)