类与对象

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

```

以上是关于类与对象的主要内容,如果未能解决你的问题,请参考以下文章

类与对象

Java-类与对象-多态

Python初识类与对象

Python初识类与对象

OOP封装:类与对象

类与对象