文章目录
- 对象=属性+方法
- 类
- OO( 面向对象Object Oriented)的特征
- self
- 构造方法:__init __ (self)
- name mangling 名字改编,名字重整
- 类、类对象、实例对象
- 类对象什么时候产生
- 类属性与实例属性
- 属性和方法名相同
- 绑定
- 删除类
python小白的笔记,欢迎指正,谨慎借鉴。
对象=属性+方法
属性:这个对象的特征(变量)
方法:这个对象做的事(函数)
类
先创建类(class),再实例化具体对象.
类名用大写字母开头(函数用小写字母开头以区分)
class Animal:
'一个叫Animal的类'
# 属性
feature = 'climb'
legs = 4
color = 'white'
# 方法(与函数不同,方法默认有一个self参数)
def home(self):
print('this is a lovely dog')
def forest(self):
print('this is a rabbit')
def zoo(self):
print('this is a bear')
(括号不要漏了!!!)
类和对象的关系:
“类和对象的关系就如同模具和用这个模具制作出点的物品之间的关系。一个类为它的全部对象给出了一个统一的定义,而他的每个对象则是符合这种定义的一个实体,因此类和对象的关系就是 抽象和具体的关系”
比如定义一个矩形,属性可以是长和宽,方法是计算周长、面积。
OO( 面向对象Object Oriented)的特征
1. 封装
将属性和方法封装到一个抽象的类中,对外部隐藏对象的工作细节,外界使用类创建对象,然后让对象调用方法,对象方法的细节都被封装在类的内部,我们看不见,只给我们需要的方法和名字就可以了。一个对象的属性可以是另外一个类创建的对象。
2. 继承
继承是子类自动共享父类之间数据和方法的机制
3. 多态
可以对不同类的对象调用相同的方法,产生不同的结果。
class Rectangle:
length = 5
width = 4
def setRect(self): #do not lose self!!!
print('请输入矩形的长和宽:')
self.length = float(input('长:'))
self.width = float(input('宽:'))
def getRect(self):
print('这个矩形的是:%.2f,宽是%.2f'%(self.length,self.width))
def getArea(self):
print('这个矩形的面积是:%.2f'%(self.length*self.width))
r.Rectangle()就是类的实例化,类的属性(变量)可以直接访问,方法要实例化后才能访问.
self
Python的self相当于C++的this指针,作用是绑定方法,可以认为方法中的self是实例对象的唯一标志。
构造方法:__init __ (self)
注意:init前后各两条线!
__init __(self, param1, param2)
实例化后会被自动调用。
name mangling 名字改编,名字重整
在Python中定义私有变量只需要在变量名或函数名前加上‘__’两个下划线,那么这个函数或变量就会为私有的了,这样子对象的属性或方法就无法被外部直接引用。
Python使用了name mangling改了"__变量名"而已:
##按照要求定义一个游乐园门票的类,并尝试计算 2个成人+1个小孩平日票价
##1.平日票价100元
##2.周末票价为平日的120%
##3.儿童半价
class Ticket():
def __init__(self,weekend=False,child=False):
self.exp = 100
if weekend:
self.inc = 1.2
else:
self.inc=1
if child:
self.discount = 0.5
else:
self.discount = 1
def calcPrice(self, num):
return self.exp * self.inc * self.discount * num
类、类对象、实例对象
大写静态类(class CC),小写实例对象(cc = C())
“self相当于cc”
定义好一个类后就是类对象。
实例对象属性修改后覆盖了类对象的属性值
类对象什么时候产生
类属性与实例属性
属性和方法名相同
属性和方法名相同,属性会覆盖方法
可多用继承,组合。属性名用名词,方法名用动词等避免。
弹幕笔记:
实例对象未修改属性时,读取到的属性是类对象的属性,所以当类对象修改时,所有未经修改的实例对象属性值都会改变。而当实例对象修改了属性以后,相当于以实体覆盖了原有类对象的投影,此时修改类对象也无济于事,对实例对象相映属性不产生影响。
绑定
Python严格要求方法需要有实例才能被调用,这种限制其实就是Python所谓的绑定概念。
删除类
类定义的方法和属性是静态变量,就算类被删除了,它们依然是存在的。
(把建房子 的图纸撕了,建好的房子还会在。)