类与对象
Posted zdq1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类与对象相关的知识,希望对你有一定的参考价值。
一、定义类:
在Python中,定义类通过class
关键字:
class 类的名称:
# 类中的内容 描述属性和技能
#描述属性用变量
#描述行为用函数
#类名称 书写规范 首先是见名知意 名称是大驼峰命名法
#驼峰就是单词首字母大写 , 大驼峰是第一个字母大写,小驼峰是第一个字母小写
class后面紧跟的类名:类名通常是大写开头的单词,多个单词时使用‘驼峰命名法’
二、创建对象
创建对象也称之为实例化,定义好Student
类后通过类名加上()实现:
class Person:
name=123#变量描述属性
#创建对象
p = Person()
#
print(p)
#<__main__.Person object at 0x0000000001E2F9E8>
#main模块下的对象
print(Person)
#<class '__main__.Person'>
#类,mian下的person类
三、对象的属性操作
对象是特征(属性)与行为(方法)的结合体
3.1、为对象添加属性方法(在创建对象后使用点语法):
stu1
这个对象目前不具备任属性和方法,要为其添加属性可以在创建对象后使用点语法(变量名加 . )
比如为stu
对象添加name属性
stu1=Student()
stu1.name='wx'
3.2写在了类中:
class Person
name='wx'
3.3、获取对象属性方法:
还是通过点语法获取属性
print(stu1.name)
总结:
属性可以写在类中
类中的属性,是所有对象公共的
class Person:
name='张三丰'
p1 = Person()
print(p1.name)#张三分
p2 = Person()
print(p2.name)#张三分
也可以写在对象中
对象中的属性,是每个对象独特的(不一样的)
p3 = Person()
p3.name = "李四"
print(p3.name)
#李四
如果类中和对象中存在同样的属性,先访问对象 如果没有在访问类
p = Person()
p.name = "李四"
print(p.name)#李四
4、练习:描述一个老师类 需要包含 一个公共属性和 一个独特的属性
class Teacher:
school='old boy'
t1=Teacher()
t1.name='sll'
t1.age=20
5、属性的增删改查
增加属性
对象变量名称.属性名称 = 属性值
删除属性
del 对象的变量名称.属性名称
修改
对象.属性 = 新的值
查看对象(加括号)属性 访问的是对象的所有属性 ,不包括类里面的,默认为空字典
print(对象.__dict__)
访问对象的类信息
print(对象.__class__)
访问类的属性
print(类.__dict__)#一大堆
#'__module__': '__main__', '__doc__': '这是一个人类型', 'desc': '都会吃饭', 'name': '张三分', '__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__': <attribute '__weakref__' of 'Person' objects>
__dict__就是名称空间
四、初始化方法init
4.1、什么是初始化方法?
用于为对象的属性设置初始值的函数
class Student:
#school='old boy'
def __init__(self,school):#取代了之前所写school='old boy'
4.2、为什么需要初始化(为对象的属性设置初始值)?
在类的实例(对象)中,一些属性是必须存在的,就可以使用初始化函数来完成,比如Student
对象中的name
属性,它是必须的,用于唯一标识一个学生
class Student:
def __init__(self,name):
print('init run')
self.name=name#添加属性
会自动将对象作为第一个参数传入,参数名称位self
可以将self改为其他任意的名称,但为了保证易读性通常是self,额外的参数须位于self之后
有了
__init__
方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init__
方法匹配的参数,但self
不需要传,Python解释器自己会把实例变量传进去,如下案例演示:
#创建实例(对象)时必须传参
stu1=Student('sll')
练习:创建一个类具备几个属性,通过初始化方法来给他设置属性
class Dog:
def __init__(self,kind,colour,age):
self.kind=kind#第一个kind为属性,第二个为参数
self.colour=kind
self.age=age
d1=Dog('二哈','黑白',1)
d1=Dog('京巴','黑白',2)
注意:该函数不能有任何返回值/.... 只能是None 规定如此..
小结:
init函数用于为对象属性设置初始值
在创建对象时会自动调用
自动传入对象本身
五、对象的绑定方法
需要访问对象数据里的方法叫对象绑定方法
练习:写一个学生类,具备一个打招呼的技能 要能输出自己的名字信息
class Student:
def __init__(self,name):#自动执行。用于为对象的属性设置初始值
self.name=name
def say_hi(self):
print('hello my name is %s'%self.name)#此时需要访问对象数据里的name
六、类的绑定方法
类绑定方法用@classmethod来装饰
特殊之处:不管用类还是对象调用,都会自动传入类本身,作为第一个参数
class OldBoyStudent:
school = "oldboy"
def __init__(self,name):
self.name = name
@classmethod
def show_school(cls):
# print(self.school)
print(cls)
OldBoyStudent.show_school()
print(OldBoyStudent)
"""
<class '__main__.OldBoyStudent'>
<class '__main__.OldBoyStudent'>
"""
七、非绑定方法
或叫做静态方法,就是即不需访问类的数据,.也不需要访问对象的数据
语法:@staticmethod
```
以上是关于类与对象的主要内容,如果未能解决你的问题,请参考以下文章