面向对象
类和对象:类是模版,对象是类创建出来的一个具体的存在
类的三要素:类名(单词首字母必须大写,单词间无下划线),属性,方法
使用名词提炼法来设计一个类
一)类的基础
dir(对象) 查看该对象的所有方法和属性
创建对象:类名()
初始化方法:
当使用类名创建对象时,会自动执行如下操作
1)为对象在内存中分配空间 __new__方法做的事情
2)为对象的属性设置初始值,也就是__init__方法做的事情。它是对象的内置方法。创建对象时,会自动执行初始化方法
即创建一个对象时,先执行new创建内存空间,然后执行init方法,为申请的空间初始化
__del__对象在销毁前,会被自动调用,如果想在销毁前做一些事情,可以重写此方法
__str__返回对象的描述信息,pirnt(对象)会打印对象的信息,如果想要自定义打印信息,可以重写此方法,但返回值必须是str
二)
面向对象特性———封装
通过需求分析提取属性和方法整合成一个类,即封装
在对象的方法内部,是可以直接访问和使用对象的属性的。
面向对象特性———继承
继承:不需要重写重复的代码
子类拥有父类的全部属性和方法,但不能直接使用父类的私有属性和方法
class 子类(父类):
继承的传递性:子类可以继承父类的父类的所有属性和方法
面向对象特性——多态
不同的子类对象调用相同得父类方法,产生不同的执行结果,
可以增加代码的灵活度,以继承和方法的重写为前提
三)特殊方法
1)类属性,类方法
实例,实例化,实例属性,实例方法
类是特殊的对象——类对象,在内存中只有一份
类属性定义——在类的下方使用赋值语句定义即可,访问类属性,使用类名.类属性。
类属性在内存中只有一份;实例属性在每个对象中都要保存一份。
类属性存储的内容是大家共有的。---那就定义成类属性。
类方法定义——-使用classmethod和cls来定义,
@classmethod
def 类方法(cls):
pass
访问类方法,使用类名.类方法
2)静态方法
定义:既不需要访问类方法类属性,实例方法,实例属性时,可以定义此方法为静态方法
格式:需要staticmethod,但不需要传入self
@staticmethod
def 静态方法():
pass
访问静态方法: 类名.静态方法()
3) 实例方法,类方法,静态方法的选择
实例方法:方法内部访问实例属性,或者访问类属性时
类方法:方法内部只访问类属性
静态方法:不需要访问类属性和实例属性。
class Foo(object):
#类属性
country = 'China'
#初始化方法
def __init__(self, name):
#实例属性
self.name = name
#实例方法
def func(self):
print(self.name)
print('实例方法')
#类方法
@classmethod
def cls_func(cls):
print('类方法')
#静态方法
@staticmethod
def static_fun():
print('静态方法')
foo = Foo('shenzhen')
print(Foo.country) #打印类属性
print(foo.name) #打印实例属性
foo.func() #调用实例方法
Foo.cls_func() #调用类方法
Foo.static_fun() #调用静态方法
四)property属性
定义property属性有两种方式,分别是装饰器和类属性, 装饰器还分为经典类和新式类。
1)经典类--装饰器方式定义:在实例方法的上面加上@property装饰器,并且仅有一个self参数,然后调用时,不需要加括号。
2)新式类--装饰器方式定义:有三种访问方式,@property,@方法名.setter, @方法名.deleter
3)类属性方式定义:使用property方法,有四个参数,具体看例子说明。
一般是property属性内部进行一系列的逻辑计算,然后将计算结果返回。
目的是简化调用者的流程
eg:
经典类--装饰器
class Person(object):
def __init__(self, name):
self.name = name
@property
def age(self):
return 18
xiaoming = Person('xiaoming')
print(xiaoming.age)
新式类--装饰器
class Person1(object):
def __init__(self, name):
self.name = name
@property
def age(self):
print('property')
@age.setter
def age(self, value):
print('age.setter')
@age.deleter
def age(self):
print('age.deleter')
xiaoming1 = Person1('xiaoming1')
xiaoming1.age
xiaoming1.age = 200
del xiaoming1.age
执行结果:
property
age.setter
age.deleter
类属性方式定义
class Good(object):
def __init__(self):
self.price = 100
self.discount = 0.8
def get_price(self):
new_price = self.price * self.discount
return new_price
def set_price(self, value):
self.price = value
def del_price(self):
self.price
PRICE = property(get_price, set_price, del_price, '价格描述')
good = Good()
good.PRICE
good.PRICE = 200
del good.PRICE
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。