一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第14天
面向对象
引例
世间万物皆对象
面向对象:
- 类
- 对象
- 属性
- 方法
举个例子:
对象: A的手机,B的手机,C的手机
对象的集合:
类别: 手机类
人类 :A,B,C
- 手机类
共同特征:品牌,颜色,尺寸,价格,... ----->属性
动作:通讯,学习,上网,... ---->方法
- 人类
特征:姓名,年龄,性别,身高,血型,....----->属性
动作:吃饭,睡觉,读书 ,... ---->方法
多个对象 ---->提取对象的共同特征和动作----> 封装到一个类中
定义
'''
class 类名(父类): 这里的括号内容可以不加
属性
方法
'''
注意:
- 所有类名都要首字母大写,多个字母采用驼峰式命名
- 所有的类都默认继承object
- 一般都是先定义类再细分
定义类和属性
- 调用
# 定义类
class Student:
name = 'mzmm403'
age = 18
#使用类创建对象
mzmm403 = Student()
#调用
print(mzmm403.name)
print(mzmm403.age)
- 修改
# 定义类
class Student:
name = 'mzmm403'
age = 18
#使用类创建对象
mzmm403 = Student()
#修改
mzmm403.age = 10
mzmm403.name = 'lichuang'
# 修改类属性
Student.name = 'mxr'
- 总结
-
调用属性值时我们是先调用对象属性,若没有再调用类属性,如果两者属性都没有则会报错
-
在对一个对象的属性进行修改时,我们只能修改对象的属性,而类属性我们无法更改
-
若想更改类属性,我们得调用类属性才能更改
方法--类中的函数
普通方法
def 方法名(self[,参数1,参数2]):
pass(方法内容)
# []内的参数可以选填
class Phone:
brand = 'huawei'
price = 4999
type = 'P40'
#Python类里的方法:call
def call(self):
print('self----->',self)
print('正在打电话....')
#对象1
phone1 = Phone()
print(phone1,'----1----')
phone1.call()
#对象2
phone2 = Phone()
print(phone2,'----2----')
phone2.call()
>>>>
<__main__.Phone object at 0x0000017DF5EC1BE0> ----1----
self-----> <__main__.Phone object at 0x0000017DF5EC1BE0>
正在打电话....
<__main__.Phone object at 0x0000017DF5F32040> ----2----
self-----> <__main__.Phone object at 0x0000017DF5F32040>
正在打电话....
>>>>
注意:(self)在这里我们看到self在传值的时候把创建的对象地址作为变量传进去了
构造器和__ int __()方法
__ 名字 __()这种方式叫魔术方法
class Phone:
def __init__(self):
print('mzmm403')
p = Phone()
- 找到类Phone(Phone的内存空间)
- 利用Phone类,向内存申请一块像Phone一样的空间
- 去Phone中寻找有没有__ init __(魔术方法),如果没有该方法,则直接在内存开辟一块地方给对象p。若有则进入该方法执行里面的动作,这是这里的self为创建的地址,然后将地址赋值给对象p
总结:总而言之就是使用__ init __就是在创建对象的时候将对象模板化,直接统一属性
- 优势:如果我们不初始化即不事先声明属性,那么下面的方法将不能正常使用
记住这句话:类的属性就是一个类的共性 实例属性就是一个类的个性