900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > python面向对象总结_python面向对象总结

python面向对象总结_python面向对象总结

时间:2019-02-06 02:43:58

相关推荐

python面向对象总结_python面向对象总结

1. 类和对象 类--对一类事物的抽象 没有实际意义 对象---真实客观存在的 类的实例化 类的具体化

类的定义

Class 类名(大驼峰命名,首字母大写),默认继承object,可以多继承

2.编写一个类 两类内容:属性---变量 行为--函数(方法)

属性 自我独有--成员属性(属于对象) 大家共享的----类属性(属于类)

行为 自我独有的--成员方法(属于对象) 大家共享的---类方法 普通函数不容许出现在类里面,方法必须是类方法或成员方法

3.构造函数 初始化函数 __init__ 不写,缺省构造器 初始化基本数据,对象被创建出来之前执行,尽量不要做业务处理

<1>.成员变量赋值

<2>.关键成员变量的创建

<3>.self永远指向当前对象自身,代表当前对象自身,等同于java的this

<4>.类方法的cls代表当前类自身

class Student(object):

school = '中国python职业技术学院'

def __init__(self, name, age=0):

# 右边的name 是传参的name,左边的自定义的,把外面传进来的name 赋予给 self.name变量

self.name = name

self.age = age

self.high = 0.0

self.score = [99, 88, 77]

def study(self):

print(f'我是{self.name},我爱学习')

def jump(self):

print(f'我是{self.name},我爱跑步')

# 类方法

@classmethod

def love_school(cls):

print(f"我爱{cls.school}")

@classmethod

def address(cls):

cls.love_school()

创建一个Student对象

zhangsan = Student(name = '张三')

lisi = Student(name= '李四')

1.获取成员变量,通过对象来获取

print(zhangsan.name)

#张三

2.修改成员变量属性,通过对象来修改,只对当前对象有效:

zhangsan.name='张四'

print(zhangsan.name)

#张四

3.调用成员方法,通过对象来调用,类不能调用成员方法,成员方法可以访问成员变量,类变量,调用类方法,调用成员方法

#<1>.通过对象调用成员方法study

zhangsan.study()

#我是张四,我爱学习

#<2>.类名不能调用成员方法

#通过Student类调用成员方法study

Student.study()

提示错误:

TypeError: study() missing 1 required positional argument: 'self'

#<3>.成员方法可以访问成员变量:

def jump(self):

#可以访问成员变量name属性

print(f'我是{self.name},我爱跑步')

zhangsan.jump()

输出:我是张四,我爱跑步

#<4>.成员方法可以访问类变量:def get_school(self):

#访问类变量school

print(self.school)

#<5>.成员方法可以调用类方法:

# 类方法

@classmethod

def love_school(cls):print(f"我爱{cls.school}")

#成员方法 def study(self):

#调用类方法

self.love_school()

zhangsan.study()

输出:

#我爱中国python职业技术学院

#<6>.成员方法可以调用成员方法

#成员方法A:

def study(self):

print(f'我是{self.name},我爱学习')

#成员方法B:

def jump(self):

#可以直接调用study方法

self.study()

zhangsan.jump()

输出:

我是张四,我爱学习

4.获取类变量:

<1>.通过对象来获取:

print(zhangsan.school)

#中国python职业技术学院

<2>. 通过类名来获取:

print(Student.school)

#中国python职业技术学院

5.修改类变量:

<1>.通过对象来修改,只对当前对象生效,其他对象不生效:

zhangsan.school='中国java学院'

print(zhangsan.school)

'中国java学院'

print(lisi.school)

'中国python职业技术学院'

<2>.通过类名来修改,所有的对象都生效:

Student.school = '中国C++学院'

print(zhangsan.school)

#中国c++学院

print(lisi.school)

#中国c++学院

6.类方法定义,方法头上需要加@classmethod 注解,方法传参cls,cls代表当前类自身,可以访问类变量,可以调用其他的类方法,类无权获取成员变量,无法调用成员方法

#<1>.类方法定义@classmethod def love_school(cls):

#可以通过当前类cls访问类变量school

print(f"我爱{cls.school}")

#<2>.调用其他的类方法

#类方法A: @classmethod

def love_school(cls):

print(f"我爱{cls.school}")

#类方法B: @classmethod

def address(cls):

cls.love_school()

#通过对象名调用类方法:

zhangsan.address()

#我爱中国python职业技术学院

#<3>. 类无法获取成员变量: @classmethod

def address(cls):

print(cls.name)

zhangsan.address()

调用address方法会报错:

AttributeError: type object 'Student' has no attribute 'name'

#<4>. 类无法调用成员方法: @classmethod

def address(cls):

#通过类调用成员方法studycls.study()

#调用类方法:zhangsan.address()

输出:

TypeError: study() missing 1 required positional argument: 'self'

7.类方法调用,通过类名来调用,或者通过对象来调用

# 1.通过对象来调用

zhangsan=Student(name='张三')

zhangsan.love_school()

# 2.通过类名来调用

Student.love_school()

8.静态方法,staticmethod ,可以访问类变量,通过类名或对象去调用,不能访问成员变量和成员方法,不需要传参

@staticmethod

def static_song():

print(f'我爱{Student.school}')

#调用:

Student.static_song()

zhangsan.static_song()

9.重写string方法,打印对象时,按照__str__方法格式展示

def __str__(self):

return f'{self.school}-{self.id}-{self.name}'

print(zhangsan)

#中国python职业技术学院-1-zhangsan

10.如果方法不需要使用成员变量,那么既可以定义成类方法,也可以定义成成员方法,如果需要使用成员变量,那么只能定义成成员方法

11.如果类里面定义了__len__()方法,那么可以对其取长度

#假设对对象的年龄取长度

def __len__(self):

return self.age

#调用方法:

zhangsan = Student(name = '张三',age=10)

print(len(zhangsan)

#10

12.类外部的方法,需要访问类内部的成本变量和类变量

# 把类对象当作参数,类的外部方法

def hello_my_school(obj):

print(f'我是{obj.name},我爱我的母校:{obj.school}')

# 调用类外部方法 hello_my_school

lisi = Student(id=1, name='lisi', age=10)hello_my_school(lisi)

#输出:

# 我是lisi,我爱我的母校:中国python职业技术学院

13.__getitem__ 按索引取值,获取对象的索引值def __getitem__(self, item):return self.score[item]

zhangsan = Student(name='张三')

print(zhangsan[-1])

#77

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。