2017.6.27 python学习 面向对象编程
2017-06-27 18:09
246 查看
面向对象编程,简称oop,对象作为程序的基本单元,一个对象包含了数据 和操作数据的函数
class Study(object):
def init(self,name,age):
self.name=name
self.age=age
1.类和实例
学习过java的同学能更容易的理解类和实例
类:是一类据用共同特点的事物的抽象描述,是创建实例的模板
实例:是一个具体的对象
2.访问限制
在class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑,但是也可以通过类名.属性的方法修改数据
在属性的名称前加上两个下划线__,将属性变成私有属性,之后就不能在通过实例名.变量名或者类名.变量名的方式范根或者修改数据
如果需要访问,可以在类中提供对应的set和get方法
你也许会发现通过实例名.变量的方法也可以修改变量的值,但是你这时候修改的并不是该变量的值,而是为该实例重新添加了一个变量,并为该变量赋值
双下划线开头的变量一定不能从外部访问吗?这个答案是否定的,我们可以通过’类名变量名’的方式访问,但是不建议你这样做,在不同的python解释器中,可能会把变量名改成不同的名称
3,继承和多态
在python中可以多继承,学过java的同学都知道java类的单继承
多态:一种事物多种形态,
方法覆盖:
如果子类和父类都存在名称相同,参数列表相同的方法,name子类方法可以覆盖父类方法
4.获取对象信息
type()–>获取对象的类型
isinstance()–>判断对象的类型
dir()–>获取对象的所有属性和方法
5.实例属性和类属性
为实例绑定属性可以通过self.属性名或者实例名.属性名的方法
直接在class中定义属性,这种属性为 类属性
6.限制实例属性
使用slots
在类级别定义
这样,这个类对应的实例就只能绑定name和age两个属性,如果绑定两个之外的属性就抛出AttributeError异常
7.@property和@属性.setter
8.定制类
定制类就是对一些方法的重写
打印一个对象,如果直接打印,我们得到的是地址值,如果想好看一点就要重写一下str方法
….
…
….
…..
9.元类
type可以返回一个对象的类型,也可以创建一个新的类型
上面代码的意思是创建一个Hello类,继承object,方法hello为fn
metaclass:元类
控制类的行为–>先定义metaclass,就可以创建类,最后创建实例。
本人对元类理解的不好,希望大神多多指教
class Study(object):
def init(self,name,age):
self.name=name
self.age=age
1.类和实例
学习过java的同学能更容易的理解类和实例
类:是一类据用共同特点的事物的抽象描述,是创建实例的模板
实例:是一个具体的对象
2.访问限制
在class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑,但是也可以通过类名.属性的方法修改数据
在属性的名称前加上两个下划线__,将属性变成私有属性,之后就不能在通过实例名.变量名或者类名.变量名的方式范根或者修改数据
如果需要访问,可以在类中提供对应的set和get方法
你也许会发现通过实例名.变量的方法也可以修改变量的值,但是你这时候修改的并不是该变量的值,而是为该实例重新添加了一个变量,并为该变量赋值
双下划线开头的变量一定不能从外部访问吗?这个答案是否定的,我们可以通过’类名变量名’的方式访问,但是不建议你这样做,在不同的python解释器中,可能会把变量名改成不同的名称
3,继承和多态
在python中可以多继承,学过java的同学都知道java类的单继承
多态:一种事物多种形态,
方法覆盖:
如果子类和父类都存在名称相同,参数列表相同的方法,name子类方法可以覆盖父类方法
4.获取对象信息
type()–>获取对象的类型
isinstance()–>判断对象的类型
dir()–>获取对象的所有属性和方法
5.实例属性和类属性
为实例绑定属性可以通过self.属性名或者实例名.属性名的方法
直接在class中定义属性,这种属性为 类属性
6.限制实例属性
使用slots
在类级别定义
class Study(object): __slots__('name','age')
这样,这个类对应的实例就只能绑定name和age两个属性,如果绑定两个之外的属性就抛出AttributeError异常
7.@property和@属性.setter
class Study(object): @property# 相当于get方法 def name(self): return self.name @name.setter def name(self,name) self.name=name
8.定制类
定制类就是对一些方法的重写
打印一个对象,如果直接打印,我们得到的是地址值,如果想好看一点就要重写一下str方法
….
…
….
…..
9.元类
type可以返回一个对象的类型,也可以创建一个新的类型
def fn(self,name='hello'): print(name) Hello = type('Hello',(object),dict(hello=fn))
上面代码的意思是创建一个Hello类,继承object,方法hello为fn
metaclass:元类
控制类的行为–>先定义metaclass,就可以创建类,最后创建实例。
# 定义一个metaclass类,继承type # metaclass是类的模板,所以必须从`type`类型派生: class ListMetaclass(type): def __new__(cls, name, bases, attrs): attrs['add'] = lambda self, value: self.append(value) return type.__new__(cls, name, bases, attrs) class MyList(list, metaclass=ListMetaclass): pass
本人对元类理解的不好,希望大神多多指教
相关文章推荐
- Python学习笔记 === python面向对象编程
- Python简明教程学习笔记5--面向对象编程
- python 面向对象编程学习
- Python基础学习代码之面向对象编程
- Python学习 (五 面向对象编程)
- Python学习 面向对象编程
- python面向对象编程学习[1]
- [学习笔记]python之面向对象编程
- Python学习----面向对象编程
- Python面向对象编程中关于类和方法的学习笔记
- python 学习之 --面向对象编程
- python学习笔记(三)之面向对象编程
- python学习(5)面向对象编程
- Python之学习笔记(面向对象编程)
- python的学习(二十)--面向对象编程
- Python学习14:面向对象编程(四)
- Python面向对象编程中的类和对象学习教程
- 我的Python学习之路之基本语法-面向对象编程
- Python面向对象编程中关于类和方法的学习笔记