码迷,mamicode.com
首页 > 其他好文 > 详细

类与对象

时间:2019-07-24 22:31:27      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:字典   attr   desc   操作   none   ati   类信息   信息   增加   

一、定义类:

在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

```

类与对象

标签:字典   attr   desc   操作   none   ati   类信息   信息   增加   

原文地址:https://www.cnblogs.com/ZDQ1/p/11241159.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!